Повернуть точку на заданный угол - PullRequest
0 голосов
/ 28 ноября 2018

Я написал код, который должен повернуть точку вокруг другой точки против часовой стрелки.Но это не работает правильно.

public boolean contains(double x, double y) {
    double ox = this.x.get() + (this.width.get()/2);
    double oy = this.y.get() + (this.height.get()/2);
    double theta = rotate.get() - (rotate.get() * 2);
    double px1 = Math.cos(theta) * (x-ox) - Math.sin(theta) * (y-oy) + ox;
    double py1 = Math.sin(theta) * (x-ox) + Math.cos(theta) * (y-oy) + oy;
    return shape.contains(px1, py1);
}

x, y - координаты вращаемой точки.

ox, oy - это координаты точки, вокруг которой вы хотите повернуть.

rotate.get () - угол поворота

Обновление: Изменения в коде, которые решили проблему, которые могут пригодиться:

    double px1 = Math.cos(Math.toRadians(theta)) * (x-ox) - Math.sin(Math.toRadians(theta)) * (y-oy) + ox;
    double py1 = Math.sin(Math.toRadians(theta)) * (x-ox) + Math.cos(Math.toRadians(theta)) * (y-oy) + oy;

Ответы [ 2 ]

0 голосов
/ 29 ноября 2018

Несмотря на то, что на этот вопрос дан ответ, еще один простой способ сделать это - использовать встроенный метод класса Rotate.Таким образом, вам не нужно беспокоиться о математике;)

Rotate r = new Rotate();
r.setPivotX(ox);
r.setPivotY(oy);
r.setAngle(angleInDegrees);
Point2D point = r.transform(new Point2D(x, y));
0 голосов
/ 28 ноября 2018

Пожалуйста, проверьте, если ваш rotate.get() даст вам значение в градусах (например, 45 °) или в радианах (например, 0,5 * пи).Math.sin() и Math.cos() будут принимать только радианы.

Чтобы преобразовать их, вы можете использовать что-то вроде angle = Math.toRadians(45)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...