Java: повернуть точку вокруг другого на указанное значение степени - PullRequest
4 голосов
/ 03 апреля 2012

Я пытаюсь повернуть 2D-точку в java вокруг другой с заданным значением градуса, в данном случае просто вокруг точки (0, 0) на 90 градусов.

Метод:

public void rotateAround(Point center, double angle) {
    x = center.x + (Math.cos(Math.toRadians(angle)) * (x - center.x) - Math.sin(Math.toRadians(angle)) * (y - center.y));
    y = center.y + (Math.sin(Math.toRadians(angle)) * (x - center.x) + Math.cos(Math.toRadians(angle)) * (y - center.y));
}

Ожидается для (3, 0): X = 0, Y = -3

Возвращено для (3, 0): X = 1,8369701987210297E-16, Y = 1,8369701987210297E-16

Ожидается для (0, -10): X = -10, Y = 0

Возвращено для (0, -10): X = 10,0, Y = 10,0

Что-то не так с самим методом? Я перенес функцию с (Поворот точки в 2D в Lua - GPWiki) на Java.

EDIT:

Сделал несколько тестов производительности. Я бы так не подумал, но векторное решение победило, поэтому я воспользуюсь этим.

Ответы [ 2 ]

10 голосов
/ 03 апреля 2012

Если у вас есть доступ к java.awt, это просто

double[] pt = {x, y};
AffineTransform.getRotateInstance(Math.toRadians(angle), center.x, center.y)
  .transform(pt, 0, pt, 0, 1); // specifying to use this double[] to hold coords
double newX = pt[0];
double newY = pt[1];
2 голосов
/ 03 апреля 2012

Вы изменяете значение X center перед выполнением вычисления значения Y.Вместо этого используйте временную точку.

Кроме того, эта функция принимает три параметра.Почему у тебя только два?

...