本文整理汇总了TypeScript中gl-matrix.mat3.invert方法的典型用法代码示例。如果您正苦于以下问题:TypeScript mat3.invert方法的具体用法?TypeScript mat3.invert怎么用?TypeScript mat3.invert使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类gl-matrix.mat3
的用法示例。
在下文中一共展示了mat3.invert方法的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的TypeScript代码示例。
示例1: InverseTransform
/**
* returns the inverse of transformation matrix
* @readonly
* @type {GLM.IArray}
*/
public get InverseTransform(): GLM.IArray {
if (this.mInverseTransVersion !== this.mVersion) {
mat3.invert(this.mCachedInverse, this.mTransformation);
this.mInverseTransVersion = this.mVersion;
}
//TODO should reset mIsTransformationDirty to false, maybe should also call an abstract function so children of this class can do some recalculations as well
return this.mCachedInverse;
}
示例2:
outMat2d = mat2d.sub(outMat2d, mat2dA, mat2dB);
outMat2d = mat2d.multiplyScalar (outMat2d, mat2dA, 2);
outMat2d = mat2d.multiplyScalarAndAdd (outMat2d, mat2dA, mat2dB, 2);
outBool = mat2d.exactEquals(mat2dA, mat2dB);
outBool = mat2d.equals(mat2dA, mat2dB);
// mat3
outMat3 = mat3.create();
outMat3 = mat3.fromMat4(outMat3, mat4A);
outMat3 = mat3.clone(mat3A);
outMat3 = mat3.copy(outMat3, mat3A);
outMat3 = mat3.fromValues(1, 2, 3, 4, 5, 6, 7, 8, 9);
outMat3 = mat3.set(outMat3, 1, 2, 3, 4, 5, 6, 7, 8, 9);
outMat3 = mat3.identity(outMat3);
outMat3 = mat3.transpose(outMat3, mat3A);
outMat3Null = mat3.invert(outMat3, mat3A);
outMat3 = mat3.adjoint(outMat3, mat3A);
outVal = mat3.determinant(mat3A);
outMat3 = mat3.multiply(outMat3, mat3A, mat3B);
outMat3 = mat3.mul(outMat3, mat3A, mat3B);
outMat3 = mat3.translate(outMat3, mat3A, vec3A);
outMat3 = mat3.rotate(outMat3, mat3A, Math.PI/2);
outMat3 = mat3.scale(outMat3, mat3A, vec2A);
outMat3 = mat3.fromTranslation(outMat3, vec2A);
outMat3 = mat3.fromRotation(outMat3, Math.PI);
outMat3 = mat3.fromScaling(outMat3, vec2A);
outMat3 = mat3.fromMat2d(outMat3, mat2dA);
outMat3 = mat3.fromQuat(outMat3, quatA);
outMat3Null = mat3.normalFromMat4(outMat3, mat4A);
outStr = mat3.str(mat3A);
outVal = mat3.frob(mat3A);
示例3:
outMat2d = mat2d.sub(outMat2d, mat2dA, mat2dB);
outMat2d = mat2d.multiplyScalar (outMat2d, mat2dA, 2);
outMat2d = mat2d.multiplyScalarAndAdd (outMat2d, mat2dA, mat2dB, 2);
outBool = mat2d.exactEquals(mat2dA, mat2dB);
outBool = mat2d.equals(mat2dA, mat2dB);
// mat3
outMat3 = mat3.create();
outMat3 = mat3.fromMat4(outMat3, mat4A);
outMat3 = mat3.clone(mat3A);
outMat3 = mat3.copy(outMat3, mat3A);
outMat3 = mat3.fromValues(1, 2, 3, 4, 5, 6, 7, 8, 9);
outMat3 = mat3.set(outMat3, 1, 2, 3, 4, 5, 6, 7, 8, 9);
outMat3 = mat3.identity(outMat3);
outMat3 = mat3.transpose(outMat3, mat3A);
outMat3 = mat3.invert(outMat3, mat3A);
outMat3 = mat3.adjoint(outMat3, mat3A);
outVal = mat3.determinant(mat3A);
outMat3 = mat3.multiply(outMat3, mat3A, mat3B);
outMat3 = mat3.mul(outMat3, mat3A, mat3B);
outMat3 = mat3.translate(outMat3, mat3A, vec3A);
outMat3 = mat3.rotate(outMat3, mat3A, Math.PI/2);
outMat3 = mat3.scale(outMat3, mat3A, vec2A);
outMat3 = mat3.fromTranslation(outMat3, vec2A);
outMat3 = mat3.fromRotation(outMat3, Math.PI);
outMat3 = mat3.fromScaling(outMat3, vec2A);
outMat3 = mat3.fromMat2d(outMat3, mat2dA);
outMat3 = mat3.fromQuat(outMat3, quatA);
outMat3 = mat3.normalFromMat4(outMat3, mat4A);
outStr = mat3.str(mat3A);
outVal = mat3.frob(mat3A);
示例4: transformMapToSquare
transformMapToSquare(...pos : [MapPos, SquarePos][]){
if(pos.length === 0) return;
if(pos.length === 1){
/*
squareToMap * squarePos = mapPos
[ s 0 x ] [s_x] [m_x]
[ 0 s y ] x [s_y] = [m_y]
[ 0 0 1 ] [ 1 ] [ 1 ]
m_x = s*s_x + x
m_y = s*s_y + y
x = m_x - s*s_x
y = m_y - s*s_y
1 > x > -1
1 > y > -1
*/
const s = this.squareToMapMatrix[0] //reuse existing scale
const x = pos[0][0][0] - s*pos[0][1][0];
const y = pos[0][0][1] - s*pos[0][1][1];
mat2d.set(this.squareToMapMatrix, s, 0, 0, s, minmax(-1, x, 1), minmax(-1, y, 1));
mat2d.invert(this.squareFromMapMatrix, this.squareToMapMatrix);
this.recalculate();
return;
}
/*
Calculate squareToMap by solving the equation
mapPos = squareToMap * squarePos
[ s 0 x ] [s_x_a s_x_b s_x_c] [m_x_a m_x_b m_x_c]
[ 0 s y ] x [s_y_a s_y_b s_y_c] = [m_y_a m_y_b m_y_c]
[ 0 0 1 ] [ 1 1 1] [ 1 1 1]
s*s_x_a + x = m_x_a
s*s_x_b + x = m_x_b
s*s_x_c + x = m_x_c
s*s_y_a + y = m_y_a
s*s_y_b + y = m_y_b
s*s_y_c + y = m_y_c
[ s_x_a 1 0 ] [ s ] [ m_x_a ]
[ s_x_b 1 0 ] [ x ] = [ m_x_b ]
[ s_x_c 1 0 ] [ y ] [ m_x_c ]
[ s_y_a 0 1 ] [ m_y_a ]
[ s_y_b 0 1 ] [ m_y_b ]
[ s_y_c 0 1 ] [ m_y_c ]
(At*A)i*At*b
Ai*Ati*At*b
Ai*b
[L*3][3] = [L]
[3*L][L*3][3] = [3*L][L]
[3*3][3] = [3]
*/
const len = pos.length;
let m00=0, m01=0, m02=0, m11=0,m12=0,m22=0;
let v0=0, v1=0, v2=0;
for(let i=0; i<len; i++){
m00 += pos[i][1][0]*pos[i][1][0] + pos[i][1][1]*pos[i][1][1];
m01 += pos[i][1][0];
m02 += pos[i][1][1];
v0 += pos[i][0][0]*pos[i][1][0] + pos[i][0][1]*pos[i][1][1];
v1 += pos[i][0][0];
v2 += pos[i][0][1];
}
const mat = mat3.fromValues(
m00, m01, m02,
m01, len, 0,
m02, 0, len);
const vec = vec3.fromValues(v0, v1, v2);
mat3.invert(mat, mat);
vec3.transformMat3(vec, vec, mat);
const s = minmax(0.001, vec[0], 2);
mat2d.set(this.squareToMapMatrix, s, 0, 0, s, minmax(-1, vec[1], 1), minmax(-1, vec[2], 1));
mat2d.invert(this.squareFromMapMatrix, this.squareToMapMatrix);
this.recalculate();
}