【问题标题】:Movement along circle around a given point 2D围绕给定点 2D 沿圆移动
【发布时间】:2012-12-20 11:06:49
【问题描述】:

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

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

谁能帮帮我?

【问题讨论】:

  • 圆没有宽度和高度。可能是为什么你最终会得到一个椭圆
  • 你是怎么想到这个的?

标签: android math opengl-es rotation


【解决方案1】:

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

想想你有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)(没有意义)

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-05-04
        • 1970-01-01
        • 1970-01-01
        • 2014-10-15
        • 1970-01-01
        • 2021-12-11
        相关资源
        最近更新 更多