【问题标题】:Java Rotating Rectangle Results In Weird ValuesJava 旋转矩形产生奇怪的值
【发布时间】:2018-02-07 06:47:42
【问题描述】:

我正在用 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 math rotation game-engine collision


    【解决方案1】:

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

    感谢@Imus answer 的正确计算。

    试试:

    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);
    

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-05-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多