从已知XYZ角度,半径和原点的点查找3D坐标?

时间:2012-08-05 20:30:24

标签: 3d rotation geometry coordinates cosine

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

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

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

我已经在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)

如果有人可以帮助我,我会非常感激。 :)

3 个答案:

答案 0 :(得分:1)

x = cos(偏航)* cos(音高)

y = sin(偏航)* cos(音高)

z = sin(音高)

不需要滚动。

这不是完美的我不会想到的?需要Radians,这可能是错误的根源。 我相信你必须得到所有四元数或合并滚动,但它足以用于中间解决方案。

在最近的情况中,我否定了x = cos(偏航)* -cos(音高)的音高cos

答案 1 :(得分:0)

假设您有一个以原点为中心的球体,具有已知半径,方位角和仰角。然后,您只需使用spherical to cartesian conversion找到笛卡尔坐标。

因此,首先采用相对B分量,A半径和角度。您获得了笛卡尔组件。然后,您可以将这些相对组件添加到笛卡尔分量,返回绝对B坐标。不要考虑滚动角度,因为有一点它没用。

答案 2 :(得分:0)

感谢您的回答。我知道很久以前这个问题得到了回答,但为了让人们阅读这篇文章,我将分享我的实施。所以在这里,在Lua;具有两个输入角度的PointOnSphere函数(方位角和高度与rotation.x和rotation.y相同)(以度为单位):

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 

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

另一个有用的链接就是这个问题,它是同样的答案:https://math.stackexchange.com/questions/264686/how-to-find-the-3d-coordinates-on-a-celestial-spheres-surface