2012-08-05 88 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