Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Мультимедиа в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.04.2010, 19:37   #1
Rin
Негодник
Форумчанин
 
Аватар для Rin
 
Регистрация: 10.11.2009
Сообщений: 880
По умолчанию построение многоугольника по точкам методом треугольников

не могу придумать алгоритм.
берутся 4 точки из массива и строится 2 треугольника 1,2,3 и 2,3,4.
проверяются на пересечение сторон. если пересечений нет , то берутся следующие точки : 2,3,4 и 3,4,5. если же есть пересечение , то ищется такое построение треугольников из 4 точек , чтобы не было пересечений. Более подробно алгоритм описан ниже.
всё просто, но вот когда думаю над алгоритмом , то не пойму как устроить счётчик вершин.
если внимательно посмотрите на картинку, то заметите интересную особенность: если точки, стоящие подряд, идут пилой, то стороны прямоугольников не будут пересекаться. Если же , наоборот , то можно оставить верхнюю точку и с ней перебирать идущие следом пары точек и строить треугольники до след. такой точки, чтобы получилась пилообразная структура из точек.
но в этом алгоритме есть косяк. посмотрев на нижнюю картинку от 6 точки до 10 точки Y всё ещё стремится вниз, но при построении треугольника 6,9,10 (выделен красым) алгоритм сдаёт сбой.
может кто то сталкивался с такой проблемой. Если да, то скиньте решение.
Изображения
Тип файла: jpg Безымянный.jpg (21.5 Кб, 135 просмотров)
Если помог, проси поставить минус. Будь оригинален!

Последний раз редактировалось Rin; 24.04.2010 в 19:40.
Rin вне форума Ответить с цитированием
Старый 24.04.2010, 22:29   #2
Rin
Негодник
Форумчанин
 
Аватар для Rin
 
Регистрация: 10.11.2009
Сообщений: 880
По умолчанию

хоть что-нить подскажите. что сразу приходит в голову. может смогу раскрутить вашу мысль.
я не прошу алгоритма на делфи, просто какие -нить предположения.
Если помог, проси поставить минус. Будь оригинален!
Rin вне форума Ответить с цитированием
Старый 24.04.2010, 23:20   #3
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Цитата:
то не пойму как устроить счётчик вершин
Если треугольники у тебя по условию смежные, то первый треугольник имеет три новые вершины, каждый последующий - одну.

Проблема из-за развернутого угла к вершине 10, тебе нужно определять угол и цепляться к последней из вершин, с к-рой угол < 180. В данном случае это 8, и насколько я понял так было бы нормально?
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог
mutabor вне форума Ответить с цитированием
Старый 24.04.2010, 23:33   #4
Rin
Негодник
Форумчанин
 
Аватар для Rin
 
Регистрация: 10.11.2009
Сообщений: 880
По умолчанию

дело обстоит так. Точки расставляются в хаотичном порядке на форме с помошью Mouse Down (заносятся в массив точек). Далее они сортируются по возрастанию относительно ОХ.
а вот потом то и тупик с созданием алгоритма. я на бумаге рассматривал разные варианты нанесения точек и там есть разные загвоздки, поэтому то и не могу решить проблему увеличения счётчика. Я немного неправильно выразился на счёт счётчика. счётчик вершин, то есть какие вершины оставлять для построения следующих двух треугольников и дальнейшей проверки на пересечение сторон, а какие увеличивать.
Если помог, проси поставить минус. Будь оригинален!
Rin вне форума Ответить с цитированием
Старый 24.04.2010, 23:57   #5
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Ну тогда сортируй их еще и по вертикали.
А вообще тут да, нужно проверять на пересечение сторон. Поищи в сети алгоритмы пересечения линий или многоугольников.
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог

Последний раз редактировалось mutabor; 25.04.2010 в 00:02.
mutabor вне форума Ответить с цитированием
Старый 25.04.2010, 00:11   #6
Rin
Негодник
Форумчанин
 
Аватар для Rin
 
Регистрация: 10.11.2009
Сообщений: 880
По умолчанию

этот алгоритм выдумал. не в нём дело. именно в счётчике вершин трабл.
чтож , спасибо за развёрнутый угол, я это не доглядел - уроки в школе прогуливал часто.
Пойду химичить.%)
Спасибо , Mutabor.
Если помог, проси поставить минус. Будь оригинален!

Последний раз редактировалось Rin; 25.04.2010 в 00:42.
Rin вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
построение окружности по 3 точкам в Delphi ксона Помощь студентам 16 12.12.2009 17:14
построение окружности заданной функции по точкам лорд преисподней Помощь студентам 1 18.11.2009 09:06
Определение площади многоугольника Bayazet Помощь студентам 5 17.02.2009 12:48
Задача с периметром многоугольника Abakan Общие вопросы C/C++ 1 02.01.2009 19:06