2013-11-14 36 views
0

enter image description here軌道物體周圍軌道物體

如何獲得入軌綠色周圍橙色和四旁綠化藍色的?

我發現很多解決方案可以在靜態點附近旋轉(int這種情況下爲橙色圓圈),但沒有找到任何適用於靜態點和移動點的良好數學公式。

angle += sunRot; 

if(angle > 360.0f) 
{ 
    angle = 0.0f; 
} 

float radian = glm::radians(angle); 

float radius = glm::distance(position, rotCenter); 

float x = rotCenter.x + (radius * cosf(radian)); 
float z = rotCenter.z + (radius * sinf(radian)); 

glm::vec3 newPos = glm::vec3(x, 0, z); 

setPosition(newPos); 

Here is我想要實現(感謝@George Profenza分享鏈接)

+1

您只需要按照正確的順序轉換每個對象。您將首先圍繞橙色物體旋轉綠色物體以獲取其位置。然後使用綠色物體的位置並圍繞它旋轉藍色物體。它們具有完美的圓形軌道,因此您可以將它們從它們繞行的物體的中心轉換一段固定的距離。 –

+0

你需要的東西[像這樣(https://www.youtube.com/watch?v=QVuU2YCwHjw&feature=youtu.be&t=1m)? –

+0

@ peter-wood,不,我只是試着模擬繞地球旋轉的太陽和月球旋轉的地球。 – tvoloshyn

回答

1

將所有計算基於當前對象的半徑和角度進行計算,並存儲對象的半徑和角度。

特別是,不要在每次迭代時根據x/y座標計算半徑:如果基礎對象在步驟之間移動,則計算的半徑將略微偏離,並且錯誤將累積。

+0

這就是問題:)現在修復!謝謝 ! – tvoloshyn

0

你應該能夠使用OpenGL的使用glPushMatrix()glPopMatrix()電話窩座標空間。 Here的一個基本示例(按鼠標查看座標空間)。 語法不是C++,但很容易看出我的意思。

你可以這樣做多種方式:只需使用推/彈出矩陣調用(連同在需要的地方/旋轉平移),它執行

  1. 極座標公式
  2. 手動乘以變換矩陣
  3. 矩陣乘法在幕後。

以防萬一你想嘗試的極座標公式:

x = cos(angle) * radius 
y = sin(angle) * radius 

凡角是圓的當前旋轉半徑是它的離旋轉中心的距離。

+0

這就是我一直在做的(極座標公式),它只適用於圍繞太陽軌道運行,但月球軌道隨着每次迭代而增加。在答案中檢查我的代碼(我剛剛添加)。 – tvoloshyn