我想在给定点周围的圆上移动一个对象。我在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);
这将沿省略号创建一个动作,而不是圆圈......
有人可以帮助我吗?
答案 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)
。
如果您将这两个坐标乘以公式中的其他两个值(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)
(没有意义)