3d 从已知XYZ角度、半径和原点的点查找三维坐标?

3d 从已知XYZ角度、半径和原点的点查找三维坐标?,3d,rotation,geometry,coordinates,trigonometry,3d,Rotation,Geometry,Coordinates,Trigonometry,我在互联网上读了300多页,但我没有得到我想要的结果,或者它不起作用,所以我希望这里的人们能帮助我。您可以使用伪代码和数学进行解释。:) 我们有点A(原点)。点A有一个半径,一个XYZ位置和XYZ旋转(我知道它可以用2个角度来完成,但我真的需要它有3个角度)。 B点的位置未知 有了这些信息,我的问题是:我如何找到B点的位置?(或者,我的问题可以改为:“如何在球体上找到三维点?”) 我已经在2D中完成了,并且在那里工作了。 对于2D,我使用了: x=pointA.x+radius*cos(angl

我在互联网上读了300多页,但我没有得到我想要的结果,或者它不起作用,所以我希望这里的人们能帮助我。您可以使用伪代码和数学进行解释。:)

我们有点A(原点)。点A有一个半径,一个XYZ位置和XYZ旋转(我知道它可以用2个角度来完成,但我真的需要它有3个角度)。 B点的位置未知

有了这些信息,我的问题是:我如何找到B点的位置?(或者,我的问题可以改为:“如何在球体上找到三维点?”)

我已经在2D中完成了,并且在那里工作了。 对于2D,我使用了:

x=pointA.x+radius*cos(angle)
y=pointA.y+radius*sin(angle)
我不使用纯矩阵,但我想使用余弦之类的。我的尝试(失败很严重,我真的不知道如何将XYZ旋转与余弦结合起来)在伪代码中:

newx=pointA.x+radius*cos(rotationY)*sin(rotationZ+toRadians(90))
newy=pointA.y+radius*cos(rotationZ-toRadians(90))*math.sin(rotationY)*math.cos(rotationX)
newz=pointA.z+radius*math.cos(rotationZ+toRadians(90))*sin(rotationX)

如果有人能帮助我,我将不胜感激。:)

假设有一个以原点为中心的球体,半径、方位角和仰角已知。然后,您可以简单地使用查找笛卡尔坐标

所以,首先取相对B分量,半径和角度。获得笛卡尔分量。然后,可以将这些相对分量添加到笛卡尔分量,返回绝对B坐标。不要考虑滚转角,因为在某点上它是没有用的。< /P> < P> x= COS(偏航)*COS(节距)

y=sin(偏航)*cos(俯仰)

z=sin(节距)

不需要滚动

这并不完美,我不认为?弧度是需要的,这可能是一个错误的来源。 我相信你必须得到所有四元数或合并滚动,但对于中间解来说,这就足够了


在最近的情况下,我否定了x=cos(偏航)*-cos(俯仰)

的俯仰角cos,谢谢你的回答。我知道这个问题很久以前就有了答案,但为了读者,我将分享我的实现。就在这里,在卢阿;具有两个输入角度的PointOnSphere函数(方位角和高度与rotation.x和rotation.y相同)(以度为单位):

请注意,当使用y轴指向上的坐标系时,此答案是相关的


另一个有用的链接是这一个,同样的问题也有类似的答案:

谢谢,通常我不理解维基百科上的那些公式,但现在我能够在我的3d环境中实现它。它成功地旋转了两个角度。但是我仍然不确定我应该使用XY还是ZX,等等?有一些惯例。你可以使用你想要的约定,但记住要与之保持一致(如果可以,请始终使用相同的约定)。如果您不知道这一点,请使用ZYX约定。
function PointOnSphere(origin,rotation,radius)
return {x=origin.x+radius*math.cos(math.rad(rotation.y))*math.cos(math.rad(rotation.x)),y=origin.y+radius*math.sin(math.rad(rotation.x)),z=origin.z+radius*math.sin(math.rad(rotation.y))*math.cos(math.rad(rotation.x))}
end