2

我想在给定点周围的圆圈上移动一个对象。我在 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);

这将沿省略号而不是圆形创建运动...

谁能帮帮我吗?

4

3 回答 3

5

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

this.setPosX(((float)Math.cos(angle)*radius ) + center.x);
this.setPosY(((float)Math.sin(angle)*radius ) +center.y);
于 2013-01-06T15:57:59.170 回答
2

该公式不正确,因为您将围绕圆的点的正确值乘以其他没有意义的不同值。

想想你有c(x,y)哪个是中心,你需要移动一个由 给出的值r(cos(angle)*radius, sin(angle)*radius)

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

如果您将这两个坐标乘以其他两个值(width并且height在您的公式中),您将更改圆形或中心的因子,因此您最终不仅会得到一个椭圆,而且会得到一个改变其中心的椭圆。

所以:

  • 圆圈: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)这没有意义)
于 2013-01-06T15:59:21.717 回答
2

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

于 2013-01-06T15:55:37.220 回答