forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Математика (http://forum.boolean.name/forumdisplay.php?f=85)
-   -   Определение winding'а полигона (http://forum.boolean.name/showthread.php?t=18761)

Кирпи4 03.12.2013 15:20

Определение winding'а полигона
 
Всем привет.
Имеется набор точек полигона (двумерного). Нужно определить, в какую сторону идёт последовательность - по часовой или против.
Весь тырнет облуркал - толку ноль. Надеюсь на вас, булочники.

impersonalis 03.12.2013 15:33

Ответ: Определение winding'а полигона
 
Считаем угол от оси координат до N-ой точки, затем до (N+1)-ой. Через atan2. По дельте угла (и определившись с ориентацией осей) определяем направление обхода. Достаточно двух точек.

pax 03.12.2013 18:21

Ответ: Определение winding'а полигона
 
Цитата:

Сообщение от impersonalis (Сообщение 270938)
Достаточно двух точек.

Наверное не всегда, если у них угол одинаковый будет? Скорее надо взять AB и AC вектора в треугольнике ABC.

genroelgvozo 09.12.2013 21:24

Ответ: Определение winding'а полигона
 
Помоему вычислять угол намного трудоемкая (в вычислительном плане) задача нежели вычислить тупо знаковую площадь (а еще быстрее удвоенную)
Допустим (x1,y1) (x2,y2) (x3,y3)
2S = (y2+y1)*(x2-x1) + (y3+y2)* (x3-x2) + (y1+y3)*(x1-x3)
Если 2S>0 то по часовой, иначе против

Ап: ссори понял что там полигон. Аналогично можно обобщить, только сумма будет не из трех а из N.
АпАп: А полигон может быть не выпуклый, и нужно для каждых трех точек определить как крутит, то начальный вариант. для общего направление вращения подсчет всей площади


Часовой пояс GMT +4, время: 11:46.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot