我想在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);
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;
}
有谁知道我哪里出错了?
由于