2013-01-06 27 views
2

我想要將圓周上的對象移動到給定點上。我在Android上使用OpenGL,而我的視口是橫向模式下的屏幕分辨率(1280 * 800)。我想旋轉一個對象的地方是例如(500,300),這是用戶按下的位置。我也有所需的圓r的半徑。 概括起來講,我已經圓,半徑和角度(量我想與遊戲循環的每次迭代移動的對象)的中心沿給定點周圍的圓運動2D

到目前爲止,我嘗試這樣做:

this.setPosX(((float)Math.cos(angle)*radius + center.x) * width); 
this.setPosY(((float)Math.sin(angle)*radius + center.y) * height); 

這將創建沿着省略號,而不是一個圓圈運動...

任何人都可以幫我嗎?

+0

圓沒有寬度和高度。也許你爲什麼最終會產生橢圓 – cjds

+0

你是怎麼想出這個的? – phant0m

回答

5

它產生一個橢圓起因圓不要有高度。試試這個代替

this.setPosX(((float)Math.cos(angle)*radius) + center.x); 
this.setPosY(((float)Math.sin(angle)*radius) +center.y); 
2

只需在最後刪除寬度和高度因子。如果你想要一個圓,你不能乘以不同因素的座標。

2

該公式是不正確的,因爲你是圍繞一個圓的點的正確值乘以其他不重要的值。

想想你有c(x,y)這是中心的事實,你需要移動一個由r(cos(angle)*radius, sin(angle)*radius)給出的值。

你得到的是p(x + cos(angle)*radius, y + sin(angle)*radius)

如果其他兩個值(公式中widthheight)要更改的因素無論是圓形或者爲中心,這樣您最終不僅是一個橢圓,從而改變橢圓乘這兩個座標,其中央。

所以:

  • 圈:p(c.x + cos(angle)*r, y + sin(angle)*r)
  • 橢圓:p(c.x + cos(angle)*w, y + sin(angle)*h)
  • 公式:p((c.x + cos(angle)*r)*w, (c.y + sin(angle)*r)*h)(這是沒有意義的)