Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.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
Math 在具有原点的点上应用旋转矩阵失败_Math_Matrix_Rotation_Rotational Matrices - Fatal编程技术网

Math 在具有原点的点上应用旋转矩阵失败

Math 在具有原点的点上应用旋转矩阵失败,math,matrix,rotation,rotational-matrices,Math,Matrix,Rotation,Rotational Matrices,从这个答案;我已经编写了一些代码,可以围绕原点旋转一个点。原点位于0,0,0 我的旋转不是偏航俯仰滚转,而是xrotyrot和zrot,它们是度(0-360)。绕X轴旋转会导致对象前后倾斜,绕Z轴旋转会导致对象旋转,就像对象的偏航一样 我想我在翻译价值观的过程中弄错了,但我似乎不明白为什么 当围绕每个分离角度旋转点时(保持其他2个为0度),每次旋转都会给出正确的解决方案 综合起来,当在X和Z或Y和Z上旋转时,结果是好的。当围绕X和Y旋转时,结果是不正确的 var cosa = cos(-

从这个答案;我已经编写了一些代码,可以围绕原点旋转一个点。原点位于0,0,0

我的旋转不是
偏航
俯仰
滚转
,而是
xrot
yrot
zrot
,它们是度(0-360)。绕X轴旋转会导致对象前后倾斜,绕Z轴旋转会导致对象旋转,就像对象的偏航一样

我想我在翻译价值观的过程中弄错了,但我似乎不明白为什么

当围绕每个分离角度旋转点时(保持其他2个为0度),每次旋转都会给出正确的解决方案

综合起来,当在X和Z或Y和Z上旋转时,结果是好的。当围绕X和Y旋转时,结果是不正确的

    var cosa = cos(-degtorad(zrot));
    var sina = sin(-degtorad(zrot));

    var cosb = cos(-degtorad(yrot));
    var sinb = sin(-degtorad(yrot));

    var cosc = cos(-degtorad(xrot));
    var sinc = sin(-degtorad(xrot));

    var Axx = cosa*cosb;
    var Axy = cosa*sinb*sinc - sina*cosc;
    var Axz = cosa*sinb*cosc + sina*sinc;

    var Ayx = sina*cosb;
    var Ayy = sina*sinb*sinc + cosa*cosc;
    var Ayz = sina*sinb*cosc - cosa*sinc;

    var Azx = -sinb;
    var Azy = cosb*sinc;
    var Azz = cosb*cosc;

    var px = Axx*x + Axy*y + Axz*z;
    var py = Ayx*x + Ayy*y + Ayz*z;
    var pz = Azx*x + Azy*y + Azz*z;
degtorad
基本上是
返回输入*pi/180

我觉得计算的顺序有问题——因为单独的旋转会给出正确的结果,仅仅是这三种方式的组合就不会

我知道这一点,因为我正在使用zrot、yrot和xrot值旋转三维模型,并在相同的三维空间中绘制点-在大多数情况下,点与模型对齐,但不在X和Y或X、Y和Z上旋转


结果视频:(通过此代码计算的橱柜角落上有2个点)

您必须记住,旋转通常不是可交换的,即围绕X旋转,然后在Y中旋转一次,不会产生与以相反顺序执行的相同旋转相同的结果。对于Euler角度,更改一个角度可以有效地旋转其他两个角度的轴。使用矩阵+既定惯例(如欧拉角的偏航-俯仰-滚转变量)比重新发明车轮更好。谢谢!问题是我一直在使用GameMaker内置的旋转模型功能;我用它来提交顶点缓冲区。然后我需要这段代码在不同部分生成的点来进行冲突检查。@meowgoesthedog正在查看函数列表。。。我实际上看到了
矩阵\u变换\u顶点
——它正是我想要的方式。谢谢:)