将两个不能在javascript中使用的基质相乘

时间:2017-02-22 00:26:56

标签: 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);
    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;
}

有谁知道我哪里出错了?

由于

0 个答案:

没有答案