Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/440.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将两个不适用于javascript的矩阵相乘_Javascript_Matrix_Linear Algebra - Fatal编程技术网

将两个不适用于javascript的矩阵相乘

将两个不适用于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);

我正在尝试在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;
}
有人知道我哪里出错了吗


谢谢你的ZY(
rr
)不正确,这是两个矩阵相乘的结果的缩写。我再次尝试了ZY,但得到了相同的结果。算出了,第一行第1列应该是
co_z*co_y
。对了,sry,我的错。扫描代码时没有意识到所有的
0
值,只是在写下完整的矩阵乘法之后。@omega如果原因是简单的打字错误或类似错误,请关闭问题。