Вычисление угла между двумя линиями в JavaFX - PullRequest
0 голосов
/ 23 апреля 2020

Я пытаюсь вычислить угол между двумя линиями в моей программе. У меня есть их (x1, y1) и (x2, y2) для обеих строк. x2 и y2 первой строки совпадают с x1 и y1.

второй строки. Я использую Point2D из библиотеки JavaFX.

Мне нужно рассчитать угол, чтобы узнать, в какую сторону повернуть -> например, написать «повернуть налево» или «повернуть направо». Я знаю, какая точка является моей начальной точкой, средней точкой и конечной точкой.

Я перепробовал все методы, которые мне удалось найти в Интернете, но ни один из них не работает. Я всегда получаю либо 0,0, либо 180 градусов.

Мне бы хотелось, чтобы метод всегда брал угол по часовой стрелке, выходящий из линии 1 (или против часовой стрелки), независимо от того, идет он вверх или вниз в системе координат или слева направо.

Я продолжаю читать о функции Math.atan2, но я не понимаю, как интерпретировать результат или работает ли он для моей проблемы.

Вот что я сейчас пытаюсь:

    Point2D vectorFrom = new Point2D(c.getX2() - c.getX1(), - (c.getY2() - 
    c.getY1()));

    Point2D vectorTo = new Point2D(n.getX2() - n.getX1(), - (n.getY2() - 
    n.getY1()));

    double direction1 = Math.atan2(vectorFrom.getX(), vectorFrom.getY());
    double direction2 = Math.atan2(vectorTo.getX(), vectorTo.getY();
    double angle = direction2 - direction1;`

1 Ответ

0 голосов
/ 23 апреля 2020

метод atan2 позволяет рассчитать угол между выбранным сегментом и горизонтальной осью, поэтому, если вы зададите какое-то абсолютное значение, оно может работать как есть. в противном случае вы можете использовать метод Point2D vector1.angle(vector2), который дает вам угол между обоими векторами, давая вам

double angle=vectorFrom.angle(vectorTo)
...