Учитывая четыре точки на плоскости, A,B,X,Y
, я хочу определить, какой из следующих двух углов меньше ∢ABX
или ∢ABY
.
Угол ∢ABX
определяется как угол BX
, когда AB
переводится как лежащий на открытом сегменте (-∞,0]
. Интуитивно, говоря «1010», я имею в виду угол, который вы получаете, поворачивая налево после посещения вершины B
.
Я бы предпочел не использовать cos
или sqrt
, чтобы сохранить точность и минимизировать производительность (код будет работать во встроенной системе).
В случае, когда A=(-1,0),B=(0,0)
, я могу сравнить два угла ∢ABX
и ∢ABY
, вычислив скалярное произведение векторов X,Y
и посмотреть его знак.
Что я могу сделать в этом случае:
- Определите, поворачивается ли
ABX
вправо или влево
- Если
ABX
поворачивает налево, проверьте, находятся ли Y
и A
на одной стороне линии на отрезке BX
. Если они - ∢ABX
меньше, чем ABY
.
- Если
ABX
повернет направо, то Y
и A
на одной стороне BX
означает, что ∢ABX
больше ∢ABY
.
Но мне это кажется слишком сложным.
Есть какой-нибудь более простой подход?