Java 旋转矩形会产生奇怪的值

Java Rotating Rectangle Results In Weird Values

我正在 Java 制作游戏引擎。我正在尝试将盒子碰撞添加到我的游戏中,并且这个盒子需要能够随玩家旋转。我搜索并找到了一个公式,该公式应该计算旋转点的新点,但是,当我旋转我的点时,它们似乎遵循一个奇怪的不成比例的图 8 路径,而不是围绕我的框中心的圆圈。

for (Point p : points) {
        //Loops through every point on the box (Square)
        //top, left, bottom, right          

        float pointX = p.getX();
        float pointY = p.getY();

        //rotation as radians
        float cos = (float) Math.cos(rotation);
        float sin = (float) Math.sin(rotation);

        pointX = centerX +(pointX-centerX) * cos + (pointY-centerY) * sin;

        pointY = centerY -(pointY-centerY) * cos + (pointX-centerX) * sin;

        p.setPos(pointX, pointY);

}

这是我旋转播放器时盒子发生的情况: https://gyazo.com/ff801ce8458269c2385e24b2dc5404f5

任何帮助将不胜感激,我已经解决这个问题将近一个星期了,结果相同。

请记住,在 java 中,Y 轴指向下方。

我自己没有测试过,但您可以尝试以下几行:

    pointX = centerX +(pointX-centerX) * cos + (pointY-centerY) * sin;
    pointY = centerY +(pointY-centerY) * cos - (pointX-centerX) * sin;

问题是您使用 pointX 的新值计算 pointY

感谢 正确的计算。

尝试:

float pointX = p.getX();
float pointY = p.getY();

//rotation as radians
float cos = (float) Math.cos(rotation);
float sin = (float) Math.sin(rotation);

float newPointX = centerX +(pointX-centerX) * cos + (pointY-centerY) * sin;
float newPointY = centerY +(pointY-centerY) * cos - (pointX-centerX) * sin;

p.setPos(newPointX, newPointY);