2012-08-05 127 views
2

我在网上看了300多页,我没有得到我想要的结果,或者它没有工作,所以我希望人们可以帮助我在这里。你可以使用伪代码和数学来解释。 :)从已知XYZ角度,半径和原点的点寻找3D坐标?

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

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

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

我将不胜感激这么多,如果有人可以帮助我。 :)

回答

0

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

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

+0

谢谢,通常我不明白,在维基百科上的公式,但现在我能落实到我的3D环境。它只有2个角度成功旋转。但我仍然不确定是否应该使用XY或ZX等? – Arundel 2012-08-06 11:33:15

+0

有约定。你可以使用你想要的约定,但记住要与它一致(如果可以的话,总是使用相同的约定)。如果您不知道这一点,请使用ZYX约定。 – Jepessen 2012-08-18 06:58:25

1

X = COS(偏航)* COS(间距)

Y = SIN(偏航)* COS(间距)

Z = SIN(间距)没有必要

胶卷。

这不完美我不觉得?需要Radians,这可能是错误的根源。 我相信你必须得到所有的Quaternion或者合并辊子,但它对于一个中间解决方案来说足够了。

在最近的情况我否定间距为X = COS(偏航)* -cos(间距)

0

感谢您的答案的COS。我知道很久以前这个问题已经得到解答,但为了读者的理解,我将分享我的实施。所以在这里,在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

相关问题