2010-08-04 42 views
0

我有一個對象在三維空間中做圓形運動,中心或圓形在x:0,y:0,z:0處半徑是一個變量。我知道物體在圓上的位置(通過它的角度[讓我們調用ar]或者它移動的距離)。圓可以在所有3個方向上傾斜,所以我有三個角度變量,讓我們稱他們爲ax,ay和az。現在我需要計算出物體在太空中的位置。我需要它的x,y和z座標。計算在3D中以圓形運動移動的對象的位置

float radius = someValue; 
float ax = someValue; 
float ay = someValue; 
float az = someValue; 
float ar = someValue; //this is representing the angle of the object on circle 

//what i need to know 
object.x = ?; 
object.y = ?; 
object.z = ?; 
+0

取出重讀,我誤解了。這艘船正在旋轉的邊緣上行駛嗎? – Adrian 2010-08-04 16:27:57

+0

ax,ay和az究竟是什麼?由於圓的中心是固定的,所以不需要給出3個角度; 2就足夠了。換句話說,az由ax和ay決定。 – user123444555621 2010-08-04 16:35:06

回答

4

您需要提供更多信息來獲得確切的公式。答案取決於你應用旋轉的順序,旋轉的方向以及圓的起始方向。此外,考慮一次旋轉一次,計算物體的位置會容易得多。

那麼,如果所有的旋轉都是0,你的對象在哪裏?

我們假設它在(r,0,0)。

的僞代碼將是這樣的:

pos0 = (r,0,0) 
pos1 = pos0, rotated around Z-axis by ar (may not be Z-axis!) 
pos2 = pos1, rotated around Z-axis by az 
pos3 = pos2, rotated around Y-axis by ay 
pos4 = pos3, rotated around X-axis by ax 

pos4將是你object的位置,如果一切設置正確。如果您在設置時遇到問題,請儘量保持ax = ay = az = 0,然後擔心ar,直到您獲得正確的結果。然後,開始一次一個設置其他角度並更新公式。

每個rotation可以與

x' = x * cos(angle) - y * sin(angle) 
y' = y * cos(angle) + x * sin(angle) 

來執行這是關於Z軸的旋轉。要在Y軸上旋轉,請使用z和x而不是x和y等。另請注意,此處角度以弧度表示。您可能需要爲某些旋轉角度設置負角度(取決於哪個方向是ar, ax, ay, az)。

你也可以用矩陣乘法來完成這個旋轉,就像Marcelo說的那樣,但是這對你的項目來說可能是矯枉過正的。

+0

我沒有得到你寫的工作,這就是爲什麼我回答這麼晚 但它的正確,我不知道我做錯了什麼。也是你寫的矩陣操縱,所以它沒有矯枉過正;) 我簡化它爲我的需要 x = 0; y = 0; z = 0; //極座標到笛卡爾座標(已經給出了2個角度) x1 = r * sin(ax)* cos(ay) y1 = r * sin(ax)* cos(ay) z1 = r * cos (ax) //圍繞最後角度的旋轉矩陣 y2 = y1 * cos(az) - z1 * sin(az) z2 = z1 * cos(az)+ y1 * cos(az) 所以我現在的數值是x1,y2和z2 最後一次旋轉是不必要的(沒有更多字符可以解釋原因:D) – x4rf41 2010-08-06 10:43:05