围绕给定点2D的圆周运动

时间:2013-01-06 15:48:03

标签: android math opengl-es rotation

我想在给定点周围的圆上移动一个对象。我在Android上使用OpenGL,而我的视口是横向模式下的屏幕分辨率(1280 * 800)。我想要旋转对象的点是例如(500,300),这是用户按下的位置。我也有所需圆圈的半径r。 总结一下,我是圆的中心,半径和角度(我希望在游戏循环的每次迭代中移动对象的数量)

到目前为止,我试过这个:

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

这将沿省略号创建一个动作,而不是圆圈......

有人可以帮助我吗?

3 个答案:

答案 0 :(得分:5)

它产生一个椭圆,因为圆圈没有高度。试试这个

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

答案 1 :(得分:2)

最后删除宽度和高度因子。如果你想要一个圆,你不能将坐标乘以不同的因子。

答案 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)
  • ellipse:p(c.x + cos(angle)*w, y + sin(angle)*h)
  • 你的公式:p((c.x + cos(angle)*r)*w, (c.y + sin(angle)*r)*h)(没有意义)