优化vector2构造函数
This commit is contained in:
@@ -96,16 +96,16 @@ module es {
|
||||
private static recursiveGetOptimizedDrawingPoints(start: Vector2, firstCtrlPoint: Vector2, secondCtrlPoint: Vector2,
|
||||
end: Vector2, points: Vector2[], distanceTolerance: number) {
|
||||
// 计算线段的所有中点
|
||||
let pt12 = Vector2.divide(Vector2.add(start, firstCtrlPoint), new Vector2(2));
|
||||
let pt23 = Vector2.divide(Vector2.add(firstCtrlPoint, secondCtrlPoint), new Vector2(2));
|
||||
let pt34 = Vector2.divide(Vector2.add(secondCtrlPoint, end), new Vector2(2));
|
||||
let pt12 = Vector2.divideScaler(Vector2.add(start, firstCtrlPoint), 2);
|
||||
let pt23 = Vector2.divideScaler(Vector2.add(firstCtrlPoint, secondCtrlPoint), 2);
|
||||
let pt34 = Vector2.divideScaler(Vector2.add(secondCtrlPoint, end), 2);
|
||||
|
||||
// 计算新半直线的中点
|
||||
let pt123 = Vector2.divide(Vector2.add(pt12, pt23), new Vector2(2));
|
||||
let pt234 = Vector2.divide(Vector2.add(pt23, pt34), new Vector2(2));
|
||||
let pt123 = Vector2.divideScaler(Vector2.add(pt12, pt23), 2);
|
||||
let pt234 = Vector2.divideScaler(Vector2.add(pt23, pt34), 2);
|
||||
|
||||
// 最后再细分最后两个中点。如果我们满足我们的距离公差,这将是我们使用的最后一点。
|
||||
let pt1234 = Vector2.divide(Vector2.add(pt123, pt234), new Vector2(2));
|
||||
let pt1234 = Vector2.divideScaler(Vector2.add(pt123, pt234), 2);
|
||||
|
||||
// 试着用一条直线来近似整个三次曲线
|
||||
let deltaLine = Vector2.subtract(end, start);
|
||||
|
||||
@@ -228,6 +228,28 @@ module es {
|
||||
return this;
|
||||
}
|
||||
|
||||
public static multiply(matrix1: Matrix2D, matrix2: Matrix2D, result: Matrix2D) {
|
||||
let m11 = (matrix1.m11 * matrix2.m11) + (matrix1.m12 * matrix2.m21);
|
||||
let m12 = (matrix1.m11 * matrix2.m12) + (matrix1.m12 * matrix2.m22);
|
||||
|
||||
let m21 = (matrix1.m21 * matrix2.m11) + (matrix1.m22 * matrix2.m21);
|
||||
let m22 = (matrix1.m21 * matrix2.m12) + (matrix1.m22 * matrix2.m22);
|
||||
|
||||
let m31 = (matrix1.m31 * matrix2.m11) + (matrix1.m32 * matrix2.m21) + matrix2.m31;
|
||||
let m32 = (matrix1.m31 * matrix2.m12) + (matrix1.m32 * matrix2.m22) + matrix2.m32;
|
||||
|
||||
result.m11 = m11;
|
||||
result.m12 = m12;
|
||||
|
||||
result.m21 = m21;
|
||||
result.m22 = m22;
|
||||
|
||||
result.m31 = m31;
|
||||
result.m32 = m32;
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
public determinant() {
|
||||
return this.m11 * this.m22 - this.m12 * this.m21;
|
||||
}
|
||||
|
||||
@@ -304,7 +304,7 @@ module es {
|
||||
*/
|
||||
public getClosestPointOnRectangleToPoint(point: Vector2) {
|
||||
// 对于每条轴,如果点在框外,就把它限制在框内,否则就不要管它
|
||||
let res = new Vector2();
|
||||
let res = es.Vector2.zero;
|
||||
res.x = MathHelper.clamp(point.x, this.left, this.right);
|
||||
res.y = MathHelper.clamp(point.y, this.top, this.bottom);
|
||||
|
||||
@@ -319,7 +319,7 @@ module es {
|
||||
*/
|
||||
public getClosestPointOnRectangleBorderToPoint(point: Vector2, edgeNormal: Vector2): Vector2 {
|
||||
// 对于每条轴,如果点在框外,就把它限制在框内,否则就不要管它
|
||||
let res = new Vector2();
|
||||
let res = es.Vector2.zero;
|
||||
res.x = MathHelper.clamp(point.x, this.left, this.right);
|
||||
res.y = MathHelper.clamp(point.y, this.top, this.bottom);
|
||||
|
||||
|
||||
@@ -9,9 +9,9 @@ module es {
|
||||
* @param x 二维空间中的x坐标
|
||||
* @param y 二维空间的y坐标
|
||||
*/
|
||||
constructor(x?: number, y?: number) {
|
||||
this.x = x ? x : 0;
|
||||
this.y = y != undefined ? y : this.x;
|
||||
constructor(x: number = 0, y: number = 0) {
|
||||
this.x = x;
|
||||
this.y = y;
|
||||
}
|
||||
|
||||
public static get zero() {
|
||||
@@ -54,13 +54,20 @@ module es {
|
||||
return result;
|
||||
}
|
||||
|
||||
public static divideScaler(value1: Vector2, value2: number) {
|
||||
let result: Vector2 = Vector2.zero;
|
||||
result.x = value1.x / value2;
|
||||
result.y = value1.y / value2;
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param value1
|
||||
* @param value2
|
||||
*/
|
||||
public static multiply(value1: Vector2, value2: Vector2) {
|
||||
let result: Vector2 = new Vector2(0, 0);
|
||||
let result: Vector2 = es.Vector2.zero;
|
||||
result.x = value1.x * value2.x;
|
||||
result.y = value1.y * value2.y;
|
||||
return result;
|
||||
@@ -73,7 +80,7 @@ module es {
|
||||
* @returns
|
||||
*/
|
||||
public static multiplyScaler(value1: Vector2, value2: number) {
|
||||
let result = new Vector2(0, 0);
|
||||
let result = es.Vector2.zero;
|
||||
result.x = value1.x * value2;
|
||||
result.y = value1.x * value2;
|
||||
return result;
|
||||
@@ -85,7 +92,7 @@ module es {
|
||||
* @param value2
|
||||
*/
|
||||
public static subtract(value1: Vector2, value2: Vector2) {
|
||||
let result: Vector2 = new Vector2(0, 0);
|
||||
let result: Vector2 = es.Vector2.zero;
|
||||
result.x = value1.x - value2.x;
|
||||
result.y = value1.y - value2.y;
|
||||
return result;
|
||||
@@ -218,7 +225,7 @@ module es {
|
||||
* @returns
|
||||
*/
|
||||
public static reflect(vector: Vector2, normal: Vector2) {
|
||||
let result: Vector2 = new Vector2();
|
||||
let result: Vector2 = es.Vector2.zero;
|
||||
let val = 2 * ((vector.x * normal.x) + (vector.y * normal.y));
|
||||
result.x = vector.x - (normal.x * val);
|
||||
result.y = vector.y - (normal.y * val);
|
||||
@@ -257,6 +264,12 @@ module es {
|
||||
return this;
|
||||
}
|
||||
|
||||
public divideScaler(value: number): Vector2 {
|
||||
this.x /= value;
|
||||
this.y /= value;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param value
|
||||
|
||||
Reference in New Issue
Block a user