Предположим, что дорожка достаточно мала, чтобы мы могли предположить, что точки лежат в плоской плоскости, например, мы можем игнорировать кривизну Земли. В этом случае вы можете преобразовать все точки в точки на плоскости, например, P (i) = (x (i), y (i)) без z-координаты.
Рассмотрим следующий алгоритм: найдите точку C = (Cx, Cy), которая находится где-то посередине пути, например, центр тяжести всех точек. Точная позиция не имеет значения. Затем представьте, что наблюдатель стоит в точке C и всегда вращается лицом к автомобилю. Вы хотите посчитать, сколько раз наблюдатель вращается во время движения автомобиля.
Чтобы сделать это, вы должны быть в состоянии найти угол со знаком, который будет вращать наблюдатель, когда транспортное средство движется между двумя соседними точками P (i) и P (i + 1) в списке точек. Это то же самое, что найти угол со знаком между векторами P (i) - C и P (i + 1) - C, что можно сделать с помощью перекрестного произведения . Это особенно легко, так как у нас есть двумерные точки. У нас есть
P = (x (i) - Cx) * (y (i + 1) - Cy) +
(x (i + 1) - Cx) * (y (i) - Cy)
Если P положительный, то наблюдатель вращается против часовой стрелки, а если он отрицательный, наблюдатель вращается по часовой стрелке. Угол поворота наблюдателя составляет
тета (i, i + 1) = арксин (P /
(длина (x (i) - C) * длина (x (i + 1) -
C)))
, где снова тэта (i, i + 1) положительна или отрицательна в зависимости от того, в каком направлении вращается наблюдатель.
Здесь мы используем, что соседние точки расположены близко друг к другу, так что наблюдатель просто поворачивается на небольшой угол меньше, чем pi / 2, между соседними точками.
Чтобы найти общую сумму, которую вращает наблюдатель, просто сложите все тэты от начала до конца пути, убедившись, что сохранился знак тэты на случай, если транспортное средство по какой-то причине движется назад. Предполагая, что тэты выражены в радианах, общее число цепей представляет собой просто сумму тэт, деленную на 2 * пи.
Для по-настоящему гиков, это просто вычисление числа обмоток пути транспортного средства вокруг C, используя определение.