2014-06-08 151 views
1

我有2點:C和P旋轉後的三維座標

我想旋轉3個維度中的C.

我該如何計算P的新位置?

我有兩個角度:'偏航'和'間距'。

偏航在'x'軸上圍繞C移動P,因此它將該點向左+和向右移動。

Pitch在'y'軸上圍繞C移動P,所以它將它向上移動並向下移動。

Z,深度+向你移動時,從你離開時 -

我當然希望把它與「中間」位置的工作太像45deg偏航和45deg間距。

偏航和變槳在DEG給出,然後轉換爲RAD(此代碼之前,這樣的代碼使用RAD)

p.x = c.x + Math.sin(yaw) * Math.sin(pitch); 
p.y = c.y + Math.cos(yaw); 
p.z = c.z + Math.cos(yaw) * Math.cos(pitch); 

想象一個球體和一個點上,我要移動的點上的球的表面。

這有時有效,有時不會。我錯過了什麼?

對不起,如果這是重複的,我不知道我應該搜索什麼。

這是一個關於我的問題,小提琴:http://jsfiddle.net/Jm6Lt/2/

藍色球的位置被計算,白色球體圍繞球體紅色的中心旋轉。

回答

1

你寫下什麼都在半徑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); 

那麼對於(yaw, pitch)=(0,0)載體是(0,1,0)(之前用C翻譯)和座標描述其旋轉,首先在YZ - 圍繞x軸的角度偏轉,然後圍繞y軸以角度間距。

+0

我明白了,但爲什麼我的代碼給出了錯誤的結果?有時候這些值只是'0'。我沒有旋轉矩陣,只有座標和角度。 –

+0

z分量中有一個cos應該有一個罪。 – LutzL

+0

我不明白髮生了什麼,我已經做了一個小提琴:http://jsfiddle.net/Jm6Lt/2/在這裏,你可以看到3個球體和一個圓柱體。紅色球體是C,藍色P,白色P2。 P的位置是計算的點(用於答案),P2是旋轉的球體,它圍繞C旋轉。圓柱體與P2相同,但它是圓柱體。爲什麼P給出錯誤的結果?或者發生了什麼?我誤解了什麼嗎?謝謝。 –