Re[6]: Поиск точки для надписи на полигоне
От: minorlogic Украина  
Дата: 27.03.05 09:49
Оценка:
Здравствуйте, McSeem2, Вы писали:

M>>Сорри за офтоп , чочу поделиться воспоминаниями о том как я писал растеризатор полигонов.

M>>в итоге получил 2 метода.

M>>1. Класический.

M>>сортируем ребра по Y, сканируем линии при каждом попадании на следующую линию ПЕРЕСОРТИРОВЫВАЕМ по X ребра, лучше всего чемто типа пузырька (т.к. сортируем в 99% почти отсортированный или отсортированный список).

MS>Мои давние знакомые из Питера оптимизировали этот алгоритм. Идея в том, что нам надо пересчитывать список активных ребер не во всех точках, а только в точках локальных экстремумов по Y, то есть, /\ или \/. Это дает огромный выигрыш, когда полигон гладкий, но состоит из большого числа точек, типа как области на картах.

MS>Но это работает только для правила even-odd fill. На практике же более актуально non-zero.

Я работал со сложными. кстати тоже для географических карт. Конечно в учет для трасировки берутся только /\ или \/. Это я только бегло описал. Хорошее описание с которого я брал куски была Майкла Абраша статья.

M>>2. трассируем каждое ребро независимо и резульнат трасировки помещаем в 2 мерный разряженный масив.

M>>Затем растиризуем по строкам каждый раз заново сортируя.

MS>Я пробовал этот метод. Возни с разреженными массивами много, резко возрастают накладные расходы по памяти, а преимущество по времени незначительное (по сравнению с общим массивом клеток и глобальной сортировкой по Y-X). Я так же пробовал модифицированный merge sort. Идея в том, что клетки вдоль ребра уже отсортированы или почти отсортированы, — либо по возрастанию, либо по убыванию — практически готовые куски для merge sort. Но в общем зачете получается выигрыш в 1-3%, и не стоит усилий, а тем более — лишней памяти.


А у меня разница в разы была. Скорее всего от того что полигоны были очень сложные и содержали (немного) самопересечения , полигоны были составными (из многихзамкнутых контуров) заполнение even-odd fill.

Если интререссно , может топик заведем по методам растеризации полигонов ?
Ищу работу, 3D, SLAM, computer graphics/vision.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.