|
|
|
Какой структурой представить полигон?
|
|||
|---|---|---|---|
|
#18+
Доброго времени суток, интересует такой вопрос, как можно представить структуру полигона? Есть "классический" вариант с массивом точек, но с такой структурой будут получаться разве что ломано-резанные полигоны. А как быть, если требуются скажем "круглешки-завитушки", скажем полигон в форме клеверного листа? Т.е вот классический вид: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Все точки хранятся в векторе mVertex. тут все просто, в том числе и определение попадания точки в полигон. Сейчас думаю сделать следующим образом, хранить в массиве не точки а сегменты. Сегмент, это отдельный класс, который представляет из себя, либо прямую, либо кривую(Безье). Как считаете, это нормальная структура для хранения, или есть подводные камни? Т.е получается что-то типа такого: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. С такой структуром, более-менее можно построить практически любой полигон, но тут остаётся главный для меня вопрос, как определять попадание точки в такой полигон? Кто что скажет? Я так думаю, такой вопрос нужно задавать тем кто программирует всякие GIS, они в этой тебе должны хорошо разбираться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2013, 11:07 |
|
||
|
Какой структурой представить полигон?
|
|||
|---|---|---|---|
|
#18+
I dont knowскажем полигон в форме клеверного листа? это не полигон, это путь (Path) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.07.2013, 11:43 |
|
||
|
Какой структурой представить полигон?
|
|||
|---|---|---|---|
|
#18+
I dont knowДоброго времени суток, интересует такой вопрос, как можно представить структуру полигона? Есть "классический" вариант с массивом точек, но с такой структурой будут получаться разве что ломано-резанные полигоны. А как быть, если требуются скажем "круглешки-завитушки", скажем полигон в форме клеверного листа? Возьми какую-нибудь навороченную графическую библиотеку и посмотри как там полигоны задаются. Например cairo или Qt::Graphics. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2013, 00:32 |
|
||
|
Какой структурой представить полигон?
|
|||
|---|---|---|---|
|
#18+
В крайнем случае можно взять PGF/TiKZ и скопировать тамошний синтаксис (это если нужно текстом пути задавать). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2013, 00:33 |
|
||
|
Какой структурой представить полигон?
|
|||
|---|---|---|---|
|
#18+
I dont knowС такой структуром, более-менее можно построить практически любой полигон, но тут остаётся главный для меня вопрос, как определять попадание точки в такой полигон? Кто что скажет? Я так думаю, такой вопрос нужно задавать тем кто программирует всякие GIS, они в этой тебе должны хорошо разбираться. Если полигон состоит из ломаной линии и выпуклый - то просто. Все его рёбра имеют направление (возьмем по часовой стрелке). И решаем уравнение о нахождении точки относительно прямой для каждого ребра. Там резалт - положительный - слева, отрицательный - справ, если ноль - то точка попала точно на реброю (или наоборот знак). Это довольно быстрый алг. и у него есть целочисленные оптимизации. Если полигон - вогнутый тогда - сложнее. Метод1. Бъём его на объединение выпуклых полигонов (любым методом) и решаем задачу для каждого суб-полигона. Метод2. Бъём произвольный полигон на множество трапеций основания которых параллельны осям X или Y системы координат. Проверка для трапеции - тривиальна. Это два линейных уравнения и две проверки. Для полигона состоящего из сложных кривых можно придумать свои формулы аналогичные проверки ориентации прямой и точки. А можно апроксимировать кривую сколь угодно близко разбиением ее на тысячи линейных рёбер. В 3Д-средствах моделирования типа АвтоКад или 3Д-макс так и делают отказываясь решать аналитику и переходя в плоскость решения тысячи атомарных но линейных и хорошо парарлелящихся задачек. Вообще эта задача имеет мат. формулировку. Гугли по ключевым, словам Интегральная Формула Коши. Она решает любые кривые даже сложнее эллиптических. Другое дело что в реальной жизни мало таких криволинейных полигонов да и задавать их будет еще сложнее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2013, 01:56 |
|
||
|
Какой структурой представить полигон?
|
|||
|---|---|---|---|
|
#18+
mayton, Чтобы упросить себе задачу, решил полигон(путь) строить из сегменов, где сегмент, двух видов: линия и arc(арка). С помощью арки можно задавать ломаные кривые ребра полигона. Теперь осталось узнать, как определить, попадает ли точка на этот arc? с линие всё просто, там просто текущая точка подставляется в уравнение прямой, если обе части уравнения равны, то точка на прямой, а как быть с аркой? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2013, 20:14 |
|
||
|
Какой структурой представить полигон?
|
|||
|---|---|---|---|
|
#18+
I dont knowmayton, Чтобы упросить себе задачу, решил полигон(путь) строить из сегменов, где сегмент, двух видов: линия и arc(арка). С помощью арки можно задавать ломаные кривые ребра полигона. Теперь осталось узнать, как определить, попадает ли точка на этот arc? с линие всё просто, там просто текущая точка подставляется в уравнение прямой, если обе части уравнения равны, то точка на прямой, а как быть с аркой?Если дугу представлять как уравнение круга (с парой углов для обозначения концов арки), то точно так же как и с линией. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2013, 20:17 |
|
||
|
Какой структурой представить полигон?
|
|||
|---|---|---|---|
|
#18+
I dont knowmayton, Чтобы упросить себе задачу, решил полигон(путь) строить из сегменов, где сегмент, двух видов: линия и arc(арка). С помощью арки можно задавать ломаные кривые ребра полигона. Теперь осталось узнать, как определить, попадает ли точка на этот arc? с линие всё просто, там просто текущая точка подставляется в уравнение прямой, если обе части уравнения равны, то точка на прямой, а как быть с аркой? Тебе обязательно потребуется делать "сопряжение" дуг и отрезков. Без этого трудно задать гладкую кривую. Развивая эту идею ты придёшь Кривым Бежье как к более удачному способу описания кривых линий. Кстати они прекрасно апроксимируют арки поэтому проблема арок сама отпадёт. http://ru.wikipedia.org/wiki/Кривая_Безье ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2013, 22:40 |
|
||
|
Какой структурой представить полигон?
|
|||
|---|---|---|---|
|
#18+
mayton, Я изначально хотел их использовать, но почему-то мне думается, что их будет сложнее использовать, в плане определения попадания точки на 1. саму кривую и 2. часть полигона обрамлённую этой кривой(или в целом задача определения попадания точки в полигон, где сторона не линия или арка, а кривая Безье). Плюс к этому, думаю будут сложности с определением пересечения полигонов, т.е найти полигон, образованный в результате пересечения двух других полигонов(в данном случае путей, т.к стороны такой фигуры будут состоять из линий и кривых). Или как искать пересечение линии и такого полигона ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2013, 07:21 |
|
||
|
Какой структурой представить полигон?
|
|||
|---|---|---|---|
|
#18+
Ну... если посмотреть на процесс начертания квадратичной кривой то можно заметить что зелёный отрезок который вычерчивает саму кривую всегда находится по одну сторону области ограниченной кривой. Для кубических кривых - не знаю пока. Там сложнее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2013, 10:32 |
|
||
|
Какой структурой представить полигон?
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2013, 10:33 |
|
||
|
Какой структурой представить полигон?
|
|||
|---|---|---|---|
|
#18+
Без сомнения, представление через прямые линии + кривые Безье, используется очень часто. 1. Postscript & bezier 2. CorelDraw & Bezier curve то есть, по существу это входит в стандарт описания векторных форматов, и неплохо бы просто взять за основу некое подмножество этого стандарта, того же постскрипта - так можно фигуру отображать в готовом продукте, пока свой не сделан. Ну и гугол на тему "пересечение точки и кривой безье" дает немало ссылок, так что наверное и это решаемо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2013, 11:13 |
|
||
|
Какой структурой представить полигон?
|
|||
|---|---|---|---|
|
#18+
"пересечение отрезка и кривой безье", конечно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2013, 11:14 |
|
||
|
|

start [/forum/topic.php?fid=16&msg=38346904&tid=1341728]: |
0ms |
get settings: |
8ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
165ms |
get topic data: |
8ms |
get forum data: |
3ms |
get page messages: |
50ms |
get tp. blocked users: |
1ms |
| others: | 223ms |
| total: | 481ms |

| 0 / 0 |
