这可能是一个我根本不知道研究答案的正确术语的问题,我很确定解决方案是三角函数。
我有一个接受 X/Y 位置坐标和角度的方法。它应该根据提供的旋转角度返回更新的 X/Y。
例如,A 点通常位于 x=0,y=2(顶部中间)。现在我需要将它旋转 90 度。在我看来,我知道它现在的位置是 x=2,y=0(右中),但我不知道产生这个的方程式。
我想我需要先确定起点的象限,然后从那里执行适当的三角函数。这是我正在使用 libgdx 开发的游戏,这是 Vector2 对象的来源。
我已经走到这一步了:
public Vector2 getPointsRotated(Vector2 startPoint, float angle){
Vector2 newPoint = new Vector2(0,0);
// determine the starting quadrant
int quad=0;
if((startPoint.x>=0)&&(startPoint.y>=0)){quad=0;}
if((startPoint.x<0)&&(startPoint.y>=0)){quad=1;}
if((startPoint.x<0)&&(startPoint.y<0)){quad=2;}
if((startPoint.x>=0)&&(startPoint.y<0)){quad=3;}
if(quad==0){
// doesn't work
newPoint.x = (float) ((newPoint.x)* (Math.sin(angle)));
newPoint.y = (float) ((newPoint.y)* (Math.cos(angle)));
}
// ...
// other quadrants also don't work
// ...
return newPoint;
}
谢谢你的帮助。
更新:几天来我一直在避免并回到这个问题。现在,在最后在这里发布问题后,我在几分钟内就弄清楚了(对于使用 libgdx 的 ppl)。
Libgdx 为 Vector2s 提供了一个旋转功能,例如:
Vector2 position = new Vector2(0,2);
position.rotate(angle);
完美运行。