将两个不适用于javascript的矩阵相乘
我正在尝试在3d中旋转一个点。我有代码通过3个矩阵乘法在所有3个x,y,z轴上旋转它。然后意识到我的案子不需要x轴。所以我就这样结束了将两个不适用于javascript的矩阵相乘,javascript,matrix,linear-algebra,Javascript,Matrix,Linear Algebra,我正在尝试在3d中旋转一个点。我有代码通过3个矩阵乘法在所有3个x,y,z轴上旋转它。然后意识到我的案子不需要x轴。所以我就这样结束了 function rotate(p, xr, yr, zr) { var si_x = Math.sin(xr); var co_x = Math.cos(xr); var si_y = Math.sin(yr); var co_y = Math.cos(yr); var si_z = Math.sin(zr);
function rotate(p, xr, yr, zr) {
var si_x = Math.sin(xr);
var co_x = Math.cos(xr);
var si_y = Math.sin(yr);
var co_y = Math.cos(yr);
var si_z = Math.sin(zr);
var co_z = Math.cos(zr);
var xrm = [
[1,0,0],
[0,co_x,-si_x],
[0, si_x,co_x]
];
var yrm = [
[co_y,0,si_y],
[0,1,0],
[-si_y, 0, co_y]
];
var zrm = [
[co_z,-si_z,0],
[si_z, co_z, 0],
[0,0,1]
];
//p = matrixMultiply(xrm, p);
p = matrixMultiply(yrm, p);
p = matrixMultiply(zrm, p);
return p;
}
这似乎很有效。但后来意识到,我基本上在做
p' = Yp
p' = Zp'
当我能做的时候
p' = (ZY)p
但当我实现它时,它会扭曲某些y值的结果,而在上面的代码中,相同的输入角度起作用
function rotate(p, xr, yr, zr) {
var si_y = Math.sin(yr);
var co_y = Math.cos(yr);
var si_z = Math.sin(zr);
var co_z = Math.cos(zr);
var rr = [
[co_z*si_y,-si_z,si_y*co_z],
[si_z*co_y, co_z, si_z*si_y],
[-si_y,0,co_y]
];
p = matrixMultiply(rr, p);
return p;
}
有人知道我哪里出错了吗
谢谢你的ZY(
rr
)不正确,这是两个矩阵相乘的结果的缩写。我再次尝试了ZY,但得到了相同的结果。算出了,第一行第1列应该是co_z*co_y
。对了,sry,我的错。扫描代码时没有意识到所有的0
值,只是在写下完整的矩阵乘法之后。@omega如果原因是简单的打字错误或类似错误,请关闭问题。