Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Как узнать направление Vector? (http://www.flasher.ru/forum/showthread.php?t=134979)

Zorro_13 13.01.2010 14:10

Как узнать направление Vector?
 
Рисуем с помощью Vector:
Код AS3:

public function DrawPathExample(){ 
 
    var square_commands:Vector.<int> = new Vector.<int>(5,true);
    square_commands[0] = 1;//moveTo
    square_commands[1] = 2;//lineTo
    square_commands[2] = 2;
    square_commands[3] = 2;
    square_commands[4] = 2;
 
    var square_coord:Vector.<Number> = new Vector.<Number>(10,true);
    square_coord[0] = 20; //x
    square_coord[1] = 10; //y
    square_coord[2] = 50;
    square_coord[3] = 10;
    square_coord[4] = 50;
    square_coord[5] = 40;
    square_coord[6] = 20;
    square_coord[7] = 40;
    square_coord[8] = 20;
    square_coord[9] = 10;
 
    graphics.beginFill(0x442266);//set the color
    graphics.drawPath(square_commands, square_coord);
    }

Как узнать направление? (то есть по часовой всё время рисовали или против или и так и так)

Cos 13.01.2010 23:02

Если многоугольник выпуклый можно попробовать так.

Берем три соседние точки x1,y1, x2,y2, x3,y3. Дальше проверяем, чтобы вторая точка (x2,y2) лежала слева или на линии (x1,y1, x3,y3). И так в цикле перебираем все.

dimarik 14.01.2010 00:30

Это мы узнаем по часовой или против? Или и так и так?

Cos 14.01.2010 17:42

Предствьте линию. Если точка слева от направления этой линии, то очевидно, что по часовой.

Да, кстати, проверять лежит ли точка (x2,y2) НА линии (x1,y1, x3,y3) не надо, т.к. это бесмысленно. Зачем чертить отрезок тремя точками.

friendrix 14.01.2010 18:09

Цитата:

Сообщение от Cos (Сообщение 878861)
Если многоугольник выпуклый можно попробовать так.

Берем три соседние точки x1,y1, x2,y2, x3,y3. Дальше проверяем, чтобы вторая точка (x2,y2) лежала слева или на линии (x1,y1, x3,y3). И так в цикле перебираем все.

при таком подходе случай y1=y3 надо рассматривать отдельно

Cos 14.01.2010 20:51

С какого это перепугу?

Главное, чтобы точки не совпадали (иначе дополнительные проверки нужно будет писать) и ваш полигон был правильным.

friendrix 15.01.2010 11:24

Все, верно, прошу прощения:)

expl 15.01.2010 22:51

Для выпкулого пногоугольника все гораздо проще:
1. Берем любые 3 точки, идущие подряд.
2. Условие по часовой=true, против=false:
(x1-x0)*(y2-y1) - (x2-x2)*(y1-y0) > 0
Для невыпуклого могут быть участки и по часовой и против, может их проссумировать как-то. Википедия в помощь

Cos 15.01.2010 22:59

Да действительно, цикл не нужен :)

Но это в том случае, если есть гарантия, что угольник правильный.

expl 15.01.2010 23:04

Не "правильный" а "выпуклый"
Выбирай, не хочу:
http://www.google.ru/search?q=%D0%9E...client=firefox


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

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.