Javascript 旋转后的三维坐标
我有两点:C和p 我想在三维空间里绕C旋转p 如何计算p的新位置 我有两个角度:“偏航”和“俯仰” 偏航在“x”轴上围绕C移动p,因此它围绕点左右移动p 俯仰在“y”轴上围绕C移动p,因此它围绕点上下移动p Z、 深度在+中向您移动,在+中远离您- 当然,我也想让它在“中间”位置工作,比如45度偏航和45度俯仰 偏航和俯仰以度为单位,然后转换为RAD(在此代码之前,代码使用RAD) 想象一个球体和一个点,我想移动球体表面上的点 这有时有效,有时无效。我错过了什么 对不起,如果这是一个重复,我不知道我应该搜索什么 以下是我的问题:Javascript 旋转后的三维坐标,javascript,math,3d,three.js,Javascript,Math,3d,Three.js,我有两点:C和p 我想在三维空间里绕C旋转p 如何计算p的新位置 我有两个角度:“偏航”和“俯仰” 偏航在“x”轴上围绕C移动p,因此它围绕点左右移动p 俯仰在“y”轴上围绕C移动p,因此它围绕点上下移动p Z、 深度在+中向您移动,在+中远离您- 当然,我也想让它在“中间”位置工作,比如45度偏航和45度俯仰 偏航和俯仰以度为单位,然后转换为RAD(在此代码之前,代码使用RAD) 想象一个球体和一个点,我想移动球体表面上的点 这有时有效,有时无效。我错过了什么 对不起,如果这是一个重复,我不知
计算蓝色球体的位置,白色球体围绕红色球体的中心旋转。您记录的是半径为1、围绕C的球体上的球坐标 查找“旋转矩阵”和“Givens旋转”,这些操作将旋转给定的点。您正在查找的操作类型将具有
P'=C+R*(P-C),
其中R是旋转矩阵
球坐标有点错误,它们应该是:
p.x = c.x + Math.sin(yaw) * Math.sin(pitch);
p.y = c.y + Math.cos(yaw);
p.z = c.z + Math.sin(yaw) * Math.cos(pitch);
然后
(偏航,俯仰)=(0,0)
的向量是(0,1,0)
(在C平移之前),坐标描述了它的旋转,首先在y-z平面上绕x轴旋转,然后再绕y轴旋转。我明白了,但为什么我的代码给出了错误的结果?有时值仅为“0”。我没有旋转矩阵,只有坐标和角度。在z分量中有一个cos,其中应该有sin。我不明白发生了什么,我做了一个小提琴:这里你可以看到3个球体和一个圆柱体。红色球体是C,蓝色球体是P,白色球体是P2。P的位置是计算点(使用您的答案),P2是一个旋转的球体,它围绕C旋转。圆柱体与P2相同,但它是一个圆柱体。为什么P给出错误的结果?或者发生了什么?我误解了什么吗?谢谢。对于旋转,它们的应用顺序非常重要。您必须查看文档,以了解设置rotation.x和.z变量的效果,以及它们从局部坐标系到全局坐标系的应用顺序。
p.x = c.x + Math.sin(yaw) * Math.sin(pitch);
p.y = c.y + Math.cos(yaw);
p.z = c.z + Math.sin(yaw) * Math.cos(pitch);