Допустим, мы имеем зубчатую форму:
И два существа движутся по его контуру.
Затем мы полностью сглаживаем форму, вытягивая углы.
Мы получаем это:
Теперь легко увидеть, что Orange двигается CW, а зеленый CCW. Как я могу сказать, в каком направлении они движутся, не сглаживая форму?
Новое изображение
Ответы:
Нарисуйте линию до бесконечности и посчитайте, сколько раз вы пересекаете фигуру (четную или нечетную), не считая отрезок, в котором находится существо. Затем проверьте, идет ли существо влево или вправо от этой линии.
В этом примере мы дважды (так ровно) пересекаем форму и идем налево. Результат немедленно из этой таблицы:
В псевдокоде:
источник
Это зависит от того, какую информацию вы имеете в своей структуре данных формы, но существо, движущееся CW вдоль контура фигуры, всегда будет иметь внутреннюю часть фигуры справа, а существо, движущееся CCW, будет иметь внутреннюю часть фигуры на его слева.
источник
источник
Вы должны знать, какой путь вокруг многоугольника определен, каким образом вершины обходят его.
Если вы этого не знаете, вы можете решить это, вычислив площадь многоугольника:
Знак результата (положительного или отрицательного) скажет вам , является ли она по часовой стрелке или против часовой стрелки. Вы должны попробовать это, чтобы увидеть, какой путь вам нужен, потому что это зависит от вашей системы координат.
Если форма по часовой стрелке:
Если форма против часовой стрелки:
источник
Кажется, Тревор уже рассмотрел этот вопрос, но вот мое решение:
вычислить область, которую покрывает ваша форма, то есть
используя площадь, вычисленную как указано выше, вы можете легко определить, является ли сама форма по часовой стрелке или нет. это по часовой стрелке, только если область ниже нуля.
проверьте, движутся ли объект (ы) так же, как вершины - это порядок или в противоположном направлении.
источник