新增Matrix2D.toMatrix/Matrix类
This commit is contained in:
40
source/bin/framework.d.ts
vendored
40
source/bin/framework.d.ts
vendored
@@ -1805,6 +1805,45 @@ declare module es {
|
||||
static approach(start: number, end: number, shift: number): number;
|
||||
}
|
||||
}
|
||||
declare module es {
|
||||
/**
|
||||
* 代表右手4x4浮点矩阵,可以存储平移、比例和旋转信息
|
||||
*/
|
||||
class Matrix {
|
||||
m11: number;
|
||||
m12: number;
|
||||
m13: number;
|
||||
m14: number;
|
||||
m21: number;
|
||||
m22: number;
|
||||
m23: number;
|
||||
m24: number;
|
||||
m31: number;
|
||||
m32: number;
|
||||
m33: number;
|
||||
m34: number;
|
||||
m41: number;
|
||||
m42: number;
|
||||
m43: number;
|
||||
m44: number;
|
||||
/**
|
||||
* 为自定义的正交视图创建一个新的投影矩阵
|
||||
* @param left
|
||||
* @param right
|
||||
* @param top
|
||||
* @param zFarPlane
|
||||
* @param result
|
||||
*/
|
||||
static createOrthographicOffCenter(left: number, right: number, bottom: number, top: number, zNearPlane: number, zFarPlane: number, result?: Matrix): void;
|
||||
/**
|
||||
* 创建一个新的矩阵,其中包含两个矩阵的乘法。
|
||||
* @param matrix1
|
||||
* @param matrix2
|
||||
* @param result
|
||||
*/
|
||||
static multiply(matrix1: Matrix, matrix2: Matrix, result?: Matrix): void;
|
||||
}
|
||||
}
|
||||
declare module es {
|
||||
/**
|
||||
* 表示右手3 * 3的浮点矩阵,可以存储平移、缩放和旋转信息。
|
||||
@@ -1891,6 +1930,7 @@ declare module es {
|
||||
* @param other
|
||||
*/
|
||||
equals(other: Matrix2D): boolean;
|
||||
static toMatrix(mat: Matrix2D): Matrix;
|
||||
toString(): string;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4490,6 +4490,86 @@ var es;
|
||||
es.MathHelper = MathHelper;
|
||||
})(es || (es = {}));
|
||||
var es;
|
||||
(function (es) {
|
||||
/**
|
||||
* 代表右手4x4浮点矩阵,可以存储平移、比例和旋转信息
|
||||
*/
|
||||
var Matrix = /** @class */ (function () {
|
||||
function Matrix() {
|
||||
}
|
||||
/**
|
||||
* 为自定义的正交视图创建一个新的投影矩阵
|
||||
* @param left
|
||||
* @param right
|
||||
* @param top
|
||||
* @param zFarPlane
|
||||
* @param result
|
||||
*/
|
||||
Matrix.createOrthographicOffCenter = function (left, right, bottom, top, zNearPlane, zFarPlane, result) {
|
||||
if (result === void 0) { result = new Matrix(); }
|
||||
result.m11 = 2 / (right - left);
|
||||
result.m12 = 0;
|
||||
result.m13 = 0;
|
||||
result.m14 = 0;
|
||||
result.m21 = 0;
|
||||
result.m22 = 2 / (top - bottom);
|
||||
result.m23 = 0;
|
||||
result.m24 = 0;
|
||||
result.m31 = 0;
|
||||
result.m32 = 0;
|
||||
result.m33 = 1 / (zNearPlane - zFarPlane);
|
||||
result.m34 = 0;
|
||||
result.m41 = (left + right) / (left - right);
|
||||
result.m42 = (top + bottom) / (bottom - top);
|
||||
result.m43 = zNearPlane / (zNearPlane - zFarPlane);
|
||||
result.m44 = 1;
|
||||
};
|
||||
/**
|
||||
* 创建一个新的矩阵,其中包含两个矩阵的乘法。
|
||||
* @param matrix1
|
||||
* @param matrix2
|
||||
* @param result
|
||||
*/
|
||||
Matrix.multiply = function (matrix1, matrix2, result) {
|
||||
if (result === void 0) { result = new Matrix(); }
|
||||
var m11 = (((matrix1.m11 * matrix2.m11) + (matrix1.m12 * matrix2.m21)) + (matrix1.m13 * matrix2.m31)) + (matrix1.m14 * matrix2.m41);
|
||||
var m12 = (((matrix1.m11 * matrix2.m12) + (matrix1.m12 * matrix2.m22)) + (matrix1.m13 * matrix2.m32)) + (matrix1.m14 * matrix2.m42);
|
||||
var m13 = (((matrix1.m11 * matrix2.m13) + (matrix1.m12 * matrix2.m23)) + (matrix1.m13 * matrix2.m33)) + (matrix1.m14 * matrix2.m43);
|
||||
var m14 = (((matrix1.m11 * matrix2.m14) + (matrix1.m12 * matrix2.m24)) + (matrix1.m13 * matrix2.m34)) + (matrix1.m14 * matrix2.m44);
|
||||
var m21 = (((matrix1.m21 * matrix2.m11) + (matrix1.m22 * matrix2.m21)) + (matrix1.m23 * matrix2.m31)) + (matrix1.m24 * matrix2.m41);
|
||||
var m22 = (((matrix1.m21 * matrix2.m12) + (matrix1.m22 * matrix2.m22)) + (matrix1.m23 * matrix2.m32)) + (matrix1.m24 * matrix2.m42);
|
||||
var m23 = (((matrix1.m21 * matrix2.m13) + (matrix1.m22 * matrix2.m23)) + (matrix1.m23 * matrix2.m33)) + (matrix1.m24 * matrix2.m43);
|
||||
var m24 = (((matrix1.m21 * matrix2.m14) + (matrix1.m22 * matrix2.m24)) + (matrix1.m23 * matrix2.m34)) + (matrix1.m24 * matrix2.m44);
|
||||
var m31 = (((matrix1.m31 * matrix2.m11) + (matrix1.m32 * matrix2.m21)) + (matrix1.m33 * matrix2.m31)) + (matrix1.m34 * matrix2.m41);
|
||||
var m32 = (((matrix1.m31 * matrix2.m12) + (matrix1.m32 * matrix2.m22)) + (matrix1.m33 * matrix2.m32)) + (matrix1.m34 * matrix2.m42);
|
||||
var m33 = (((matrix1.m31 * matrix2.m13) + (matrix1.m32 * matrix2.m23)) + (matrix1.m33 * matrix2.m33)) + (matrix1.m34 * matrix2.m43);
|
||||
var m34 = (((matrix1.m31 * matrix2.m14) + (matrix1.m32 * matrix2.m24)) + (matrix1.m33 * matrix2.m34)) + (matrix1.m34 * matrix2.m44);
|
||||
var m41 = (((matrix1.m41 * matrix2.m11) + (matrix1.m42 * matrix2.m21)) + (matrix1.m43 * matrix2.m31)) + (matrix1.m44 * matrix2.m41);
|
||||
var m42 = (((matrix1.m41 * matrix2.m12) + (matrix1.m42 * matrix2.m22)) + (matrix1.m43 * matrix2.m32)) + (matrix1.m44 * matrix2.m42);
|
||||
var m43 = (((matrix1.m41 * matrix2.m13) + (matrix1.m42 * matrix2.m23)) + (matrix1.m43 * matrix2.m33)) + (matrix1.m44 * matrix2.m43);
|
||||
var m44 = (((matrix1.m41 * matrix2.m14) + (matrix1.m42 * matrix2.m24)) + (matrix1.m43 * matrix2.m34)) + (matrix1.m44 * matrix2.m44);
|
||||
result.m11 = m11;
|
||||
result.m12 = m12;
|
||||
result.m13 = m13;
|
||||
result.m14 = m14;
|
||||
result.m21 = m21;
|
||||
result.m22 = m22;
|
||||
result.m23 = m23;
|
||||
result.m24 = m24;
|
||||
result.m31 = m31;
|
||||
result.m32 = m32;
|
||||
result.m33 = m33;
|
||||
result.m34 = m34;
|
||||
result.m41 = m41;
|
||||
result.m42 = m42;
|
||||
result.m43 = m43;
|
||||
result.m44 = m44;
|
||||
};
|
||||
return Matrix;
|
||||
}());
|
||||
es.Matrix = Matrix;
|
||||
})(es || (es = {}));
|
||||
var es;
|
||||
(function (es) {
|
||||
/**
|
||||
* 表示右手3 * 3的浮点矩阵,可以存储平移、缩放和旋转信息。
|
||||
@@ -4731,6 +4811,26 @@ var es;
|
||||
Matrix2D.prototype.equals = function (other) {
|
||||
return this == other;
|
||||
};
|
||||
Matrix2D.toMatrix = function (mat) {
|
||||
var matrix = new es.Matrix();
|
||||
matrix.m11 = mat.m11;
|
||||
matrix.m12 = mat.m12;
|
||||
matrix.m13 = 0;
|
||||
matrix.m14 = 0;
|
||||
matrix.m21 = mat.m21;
|
||||
matrix.m22 = mat.m22;
|
||||
matrix.m23 = 0;
|
||||
matrix.m24 = 0;
|
||||
matrix.m31 = 0;
|
||||
matrix.m32 = 0;
|
||||
matrix.m33 = 1;
|
||||
matrix.m34 = 0;
|
||||
matrix.m41 = mat.m31;
|
||||
matrix.m42 = mat.m32;
|
||||
matrix.m43 = 0;
|
||||
matrix.m44 = 1;
|
||||
return matrix;
|
||||
};
|
||||
Matrix2D.prototype.toString = function () {
|
||||
return "{m11:" + this.m11 + " m12:" + this.m12 + " m21:" + this.m21 + " m22:" + this.m22 + " m31:" + this.m31 + " m32:" + this.m32 + "}";
|
||||
};
|
||||
|
||||
2
source/bin/framework.min.js
vendored
2
source/bin/framework.min.js
vendored
File diff suppressed because one or more lines are too long
91
source/src/Math/Matrix.ts
Normal file
91
source/src/Math/Matrix.ts
Normal file
@@ -0,0 +1,91 @@
|
||||
module es {
|
||||
/**
|
||||
* 代表右手4x4浮点矩阵,可以存储平移、比例和旋转信息
|
||||
*/
|
||||
export class Matrix {
|
||||
public m11: number;
|
||||
public m12: number;
|
||||
public m13: number;
|
||||
public m14: number;
|
||||
public m21: number;
|
||||
public m22: number;
|
||||
public m23: number;
|
||||
public m24: number;
|
||||
public m31: number;
|
||||
public m32: number;
|
||||
public m33: number;
|
||||
public m34: number;
|
||||
public m41: number;
|
||||
public m42: number;
|
||||
public m43: number;
|
||||
public m44: number;
|
||||
|
||||
/**
|
||||
* 为自定义的正交视图创建一个新的投影矩阵
|
||||
* @param left
|
||||
* @param right
|
||||
* @param top
|
||||
* @param zFarPlane
|
||||
* @param result
|
||||
*/
|
||||
public static createOrthographicOffCenter(left: number, right: number, bottom: number, top: number, zNearPlane: number, zFarPlane: number, result: Matrix = new Matrix()) {
|
||||
result.m11 = 2 / (right - left);
|
||||
result.m12 = 0;
|
||||
result.m13 = 0;
|
||||
result.m14 = 0;
|
||||
result.m21 = 0;
|
||||
result.m22 = 2 / (top - bottom);
|
||||
result.m23 = 0;
|
||||
result.m24 = 0;
|
||||
result.m31 = 0;
|
||||
result.m32 = 0;
|
||||
result.m33 = 1 / (zNearPlane - zFarPlane);
|
||||
result.m34 = 0;
|
||||
result.m41 = (left + right) / (left - right);
|
||||
result.m42 = (top + bottom) / (bottom - top);
|
||||
result.m43 = zNearPlane / (zNearPlane - zFarPlane);
|
||||
result.m44 = 1;
|
||||
}
|
||||
|
||||
/**
|
||||
* 创建一个新的矩阵,其中包含两个矩阵的乘法。
|
||||
* @param matrix1
|
||||
* @param matrix2
|
||||
* @param result
|
||||
*/
|
||||
public static multiply(matrix1: Matrix, matrix2: Matrix, result: Matrix = new Matrix()) {
|
||||
let m11 = (((matrix1.m11 * matrix2.m11) + (matrix1.m12 * matrix2.m21)) + (matrix1.m13 * matrix2.m31)) + (matrix1.m14 * matrix2.m41);
|
||||
let m12 = (((matrix1.m11 * matrix2.m12) + (matrix1.m12 * matrix2.m22)) + (matrix1.m13 * matrix2.m32)) + (matrix1.m14 * matrix2.m42);
|
||||
let m13 = (((matrix1.m11 * matrix2.m13) + (matrix1.m12 * matrix2.m23)) + (matrix1.m13 * matrix2.m33)) + (matrix1.m14 * matrix2.m43);
|
||||
let m14 = (((matrix1.m11 * matrix2.m14) + (matrix1.m12 * matrix2.m24)) + (matrix1.m13 * matrix2.m34)) + (matrix1.m14 * matrix2.m44);
|
||||
let m21 = (((matrix1.m21 * matrix2.m11) + (matrix1.m22 * matrix2.m21)) + (matrix1.m23 * matrix2.m31)) + (matrix1.m24 * matrix2.m41);
|
||||
let m22 = (((matrix1.m21 * matrix2.m12) + (matrix1.m22 * matrix2.m22)) + (matrix1.m23 * matrix2.m32)) + (matrix1.m24 * matrix2.m42);
|
||||
let m23 = (((matrix1.m21 * matrix2.m13) + (matrix1.m22 * matrix2.m23)) + (matrix1.m23 * matrix2.m33)) + (matrix1.m24 * matrix2.m43);
|
||||
let m24 = (((matrix1.m21 * matrix2.m14) + (matrix1.m22 * matrix2.m24)) + (matrix1.m23 * matrix2.m34)) + (matrix1.m24 * matrix2.m44);
|
||||
let m31 = (((matrix1.m31 * matrix2.m11) + (matrix1.m32 * matrix2.m21)) + (matrix1.m33 * matrix2.m31)) + (matrix1.m34 * matrix2.m41);
|
||||
let m32 = (((matrix1.m31 * matrix2.m12) + (matrix1.m32 * matrix2.m22)) + (matrix1.m33 * matrix2.m32)) + (matrix1.m34 * matrix2.m42);
|
||||
let m33 = (((matrix1.m31 * matrix2.m13) + (matrix1.m32 * matrix2.m23)) + (matrix1.m33 * matrix2.m33)) + (matrix1.m34 * matrix2.m43);
|
||||
let m34 = (((matrix1.m31 * matrix2.m14) + (matrix1.m32 * matrix2.m24)) + (matrix1.m33 * matrix2.m34)) + (matrix1.m34 * matrix2.m44);
|
||||
let m41 = (((matrix1.m41 * matrix2.m11) + (matrix1.m42 * matrix2.m21)) + (matrix1.m43 * matrix2.m31)) + (matrix1.m44 * matrix2.m41);
|
||||
let m42 = (((matrix1.m41 * matrix2.m12) + (matrix1.m42 * matrix2.m22)) + (matrix1.m43 * matrix2.m32)) + (matrix1.m44 * matrix2.m42);
|
||||
let m43 = (((matrix1.m41 * matrix2.m13) + (matrix1.m42 * matrix2.m23)) + (matrix1.m43 * matrix2.m33)) + (matrix1.m44 * matrix2.m43);
|
||||
let m44 = (((matrix1.m41 * matrix2.m14) + (matrix1.m42 * matrix2.m24)) + (matrix1.m43 * matrix2.m34)) + (matrix1.m44 * matrix2.m44);
|
||||
result.m11 = m11;
|
||||
result.m12 = m12;
|
||||
result.m13 = m13;
|
||||
result.m14 = m14;
|
||||
result.m21 = m21;
|
||||
result.m22 = m22;
|
||||
result.m23 = m23;
|
||||
result.m24 = m24;
|
||||
result.m31 = m31;
|
||||
result.m32 = m32;
|
||||
result.m33 = m33;
|
||||
result.m34 = m34;
|
||||
result.m41 = m41;
|
||||
result.m42 = m42;
|
||||
result.m43 = m43;
|
||||
result.m44 = m44;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -280,6 +280,27 @@ module es {
|
||||
return this == other;
|
||||
}
|
||||
|
||||
public static toMatrix(mat: Matrix2D) {
|
||||
let matrix = new Matrix();
|
||||
matrix.m11 = mat.m11;
|
||||
matrix.m12 = mat.m12;
|
||||
matrix.m13 = 0;
|
||||
matrix.m14 = 0;
|
||||
matrix.m21 = mat.m21;
|
||||
matrix.m22 = mat.m22;
|
||||
matrix.m23 = 0;
|
||||
matrix.m24 = 0;
|
||||
matrix.m31 = 0;
|
||||
matrix.m32 = 0;
|
||||
matrix.m33 = 1;
|
||||
matrix.m34 = 0;
|
||||
matrix.m41 = mat.m31;
|
||||
matrix.m42 = mat.m32;
|
||||
matrix.m43 = 0;
|
||||
matrix.m44 = 1;
|
||||
return matrix;
|
||||
}
|
||||
|
||||
public toString() {
|
||||
return `{m11:${this.m11} m12:${this.m12} m21:${this.m21} m22:${this.m22} m31:${this.m31} m32:${this.m32}}`
|
||||
}
|
||||
|
||||
@@ -255,7 +255,7 @@ module es {
|
||||
*/
|
||||
public loadRectangleBoundaries(){
|
||||
this.addSegment(new Vector2(this._origin.x - this._radius, this._origin.y - this._radius),
|
||||
new Vector2(this._origin.x + this._radius, this._origin.y - this._radius);
|
||||
new Vector2(this._origin.x + this._radius, this._origin.y - this._radius));
|
||||
this.addSegment(new Vector2(this._origin.x - this._radius, this._origin.y + this._radius),
|
||||
new Vector2(this._origin.x + this._radius, this._origin.y + this._radius));
|
||||
this.addSegment(new Vector2(this._origin.x - this._radius, this._origin.y - this._radius),
|
||||
|
||||
BIN
sponsor/alipay.jpg
Normal file
BIN
sponsor/alipay.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 234 KiB |
BIN
sponsor/wechatpay.png
Normal file
BIN
sponsor/wechatpay.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 131 KiB |
Reference in New Issue
Block a user