|
ru.algorithms- RU.ALGORITHMS ---------------------------------------------------------------- From : Evgeny Goljakov 2:5020/2065.608 06 Apr 2003 02:29:28 To : All Subject : Векторная заливка в 2D --------------------------------------------------------------------------------
или просто поделится своими идеями.
-Имеется список ломанных Линий, каждая задана 2 или более Точками,
последовательно соединенными прямыми.
-Каждая Точка описана парой координат X,Y.
-Пересекаясь, линии "режут" друг-друга. След. только из первой или последней
точки линии возможно разветвление.
Hеобходимо из заданной старт Точки Т0 с любыми X,Y "разлить" чернила по
области, ограниченной имеющимися линиями.
Линии идентефицируются по порядковому номеру, поэтому начав
обход периметра, заполняем номерани массив, далее после- довательно заполняем
др. массив точками, которые будут
являтьхя вершинами многоугольника-заливки)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Появились вопросы, требующие однозначного решения:
1.Как всегда начинать обход по час/против, ведь юзер может поставить точку
заливки произвольно, в будующем контуре. Осложняется тем, что линии слагающие
будующий контур имеют взаимно различную направленность Точек и произвольную
форму.
// Тут я пускаю луч на лево до подсечения ближайшей линии, в
точке пересечения беру ближайшую точку с одной и др. стороны,
сравниваю какая выше и принимаю данное направление за обход
по час стрелке.
Часные случаи пока не волнуют. Типа горизонтальные линии,
висячие концы, самопересечения и т.п.
2. Hеобходимо выполнение условия выбора в точке развилки линии
с наименьшим углом против направления обхода контура, что
будет соответствовать выбору фигуры с мин. периметром.
Т.е. определить наименьший угол у развилки, (имея координаты:
Т1(X,Y)-начало всех линий в месте развилки и
Т2(X,Y)-вторыые точки, ломанных далее линий)
по отношению к текущей линии контура, т.е. ее последней/первой
точки Т1 и предпоследней/второй, т.к. за этим линейным сегментом линия может
быть произвольно ломанна.
// Я нахожу в лоб:
-четверть (т.е. знак dx и dy) и
-dx/dy (т.е. tg(угла наклона к оси абсцисс))
для всех линий и беру наименьшую против час стрелки (ибо за
направление обхода принял обход по час стрелке) по отношению
к текущей линии контура.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Возможно, вопросы здесь обсуждались, буду рад любой помощи.
Для справки пишу на Avenue -среда разработки GIS ArcView3.x.
Hайденные пару нужных сорцов на www.esri.com - зашифрованы :(
Подобное как-то реализованно в автокаде или флэшке?
Спасибо за внимание.
--- Spencer Winset >m>
* Origin: Скептис присутствует (2:5020/2065.608)
Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.algorithms/534208110468.html, оценка из 5, голосов 10
|