Вращающийся прямоугольник Java приводит к странным значениям

Я делаю игровой движок на 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

Любая помощь будет принята с благодарностью, я занимаюсь этим уже почти неделю с теми же результатами.


person Jacob Adamson    schedule 07.02.2018    source источник


Ответы (2)


Проблема в том, что вы вычисляете pointY с новым значением pointX.

Спасибо @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);
person Community    schedule 07.02.2018

Помните, что в Java ось Y направлена ​​вниз.

Сам не проверял, но вы можете попробовать следующие строки:

    pointX = centerX +(pointX-centerX) * cos + (pointY-centerY) * sin;
    pointY = centerY +(pointY-centerY) * cos - (pointX-centerX) * sin;
person Imus    schedule 07.02.2018