Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/454.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_Math_3d_Three.js - Fatal编程技术网

Javascript 旋转后的三维坐标

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) 想象一个球体和一个点,我想移动球体表面上的点 这有时有效,有时无效。我错过了什么 对不起,如果这是一个重复,我不知

我有两点: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);