2

这可能是一个我根本不知道研究答案的正确术语的问题,我很确定解决方案是三角函数。

我有一个接受 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);

完美运行。

4

1 回答 1

0

我发现旋转矩阵对这类问题非常有帮助。

https://gamedev.stackexchange.com/questions/54299/tetris-rotations-using-linear-algebra-rotation-matrices

于 2013-11-13T22:21:09.100 回答