найти угол точки, связанный с поворотом - PullRequest
2 голосов
/ 19 ноября 2010

Уже несколько дней я работаю над проектом, в котором мне нужно использовать выпуклый корпус и определенный метод сканирования Грэма. Проблема была решена до места, где я хочу отсортировать баллы. Итак, история в том, что я собрал кучу точек, которые относятся к типу Point, и их координаты являются родственниками. Значит, они происходят от событий мыши x и y. Итак, я собрал позиции мыши в виде точек x и y. И я хочу найти угол, связанный с точкой поворота. У кого-нибудь есть кусок кода для расчета этого угла? Большое и большое спасибо, изображение ниже - то, что мне нужно: Angles over pivote

Ответы [ 3 ]

7 голосов
/ 19 ноября 2010

Использование

Math.atan2(dy, dx)

, где dy и dx представляют вертикальную и горизонтальную разницу между точкой и точкой поворота.

Несколько замечаний, которые следует иметь в виду:

  • Ссылка (0 радиан) по соглашению направлена ​​вправо, а не влево, как на вашем изображении. Если вы действительно хотите измерить его слева, вам нужно будет сделать Math.PI - angle, чтобы преобразовать его.

  • Функции Math -тригонометрии работают в радианах. Чтобы преобразовать результаты в градусы, вы можете использовать Math.toDegrees.

  • В математическом мире растущие значения y указывают вверх. На вашем изображении они направлены вниз.

2 голосов
/ 19 ноября 2010

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

(Проститемоя запись математики не очень хорошо работает в уценке ...)

Где A и B - это двухмерные векторы с x и y компонентами, а theta - этоугол между ними:

dot(A, B) = ax * bx + ay * by

и

dot(A, B) = |A| * |B| * cos(theta)

... где |A| - длина A, которую можно вычислить с помощью Теорема Пифагора :

|A| = sqrt(ax^2 + ay^2)

Следовательно:

theta = acos((ax * bx + ay * by) / (|A| * |B|))
1 голос
/ 19 ноября 2010

, чтобы получить угол от горизонтали линии, соединяющей любые две точки p1 и p2: Angle = atan ((p1.y - p2.y) / (p1.x - p2.x)

Таким образом, ваш черный угол = atan ((454-243) / (286-108)) ПРИМЕЧАНИЕ: знак y перевернут, поскольку ваша ось y начинается сверху слева, а не снизу слева

Угол будет в радианах, для преобразования в градусы кратно (180 / pi)

...