Крест продукт измеряет степень перпендикулярной-ность двух векторов. Представьте, что каждое ребро вашего многоугольника является вектором в плоскости xy трехмерного (3-D) пространства xyz. Тогда перекрестным произведением двух последовательных ребер является вектор в направлении z (положительное направление z, если второй сегмент направлен по часовой стрелке, минус направление z, если против часовой стрелки). Величина этого вектора пропорциональна синусу угла между двумя исходными краями, поэтому он достигает максимума, когда они перпендикулярны, и сужается, чтобы исчезнуть, когда края коллинеарны (параллельны).
Итак, для каждой вершины (точки) многоугольника рассчитайте величину двойного произведения двух соседних ребер:
Using your data:
point[0] = (5, 0)
point[1] = (6, 4)
point[2] = (4, 5)
point[3] = (1, 5)
point[4] = (1, 0)
Так обозначьте края последовательно как
edgeA
сегмент от point0
к point1
и
edgeB
между point1
к point2
...
edgeE
между point4
и point0
.
Тогда вершина A ( point0
) находится между
edgeE
[From point4
to point0
]
edgeA
[From point0
to `point1 '
Эти два ребра сами являются векторами, координаты x и y которых можно определить, вычитая координаты их начальной и конечной точек:
edgeE
= point0
- point4
= (1, 0) - (5, 0)
= (-4, 0)
и
edgeA
= point1
- point0
= (6, 4) - (1, 0)
= (5, 4)
и
И крест произведение этих двух смежных ребер вычисляется с использованием определитель следующей матрицы, которая строится путем ввода координат двух векторов ниже символов , представляющих три оси координат ( i
, j
, & k
). Третья (нулевая) -значная координата существует потому, что концепция кросс-произведения является трехмерной конструкцией, и поэтому мы расширяем эти 2-D векторы в 3-D, чтобы применить кросс-произведение:
i j k
-4 0 0
1 4 0
Учитывая, что все перекрестные произведения дают вектор, перпендикулярный к плоскости умножаемых двух векторов, определитель матрицы выше имеет только k
компонент (или ось Z).
Формула для вычисления величины компонента k
или оси z имеет вид
a1*b2 - a2*b1 = -4* 4 - 0* 1
= -16
Величина этого значения ( -16
) является мерой синуса угла между двумя исходными векторами, умноженного на произведение величин двух векторов.
На самом деле, другая формула для его стоимости
A X B (Cross Product) = |A| * |B| * sin(AB)
.
Итак, чтобы вернуться к показателю угла, вам нужно разделить это значение ( -16
) на произведение двух векторов.
|A| * |B|
= 4 * Sqrt(17)
=16.4924...
Таким образом, мера греха (AB) = -16 / 16.4924
=-.97014...
Это мера того, изогнулся ли следующий сегмент после вершины влево или вправо, и насколько. Нет необходимости принимать арк-синус. Все, о чем мы будем заботиться, это его величина и, конечно, его знак (положительный или отрицательный)!
Сделайте это для каждой из 4 других точек по замкнутому пути и сложите значения из этого расчета в каждой вершине.
Если итоговая сумма положительна, вы пошли по часовой стрелке, отрицательно, против часовой стрелки.