Триангуляция Делоне на Basice
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Триангуляция Делоне на Basice

Триангуляция Делоне на Basice

Ответ
Поиск в этой теме
Непрочитано 21.02.2011, 06:38 #1
Триангуляция Делоне на Basice
МишаИнженер
 
Регистрация: 14.12.2008
Сообщений: 1,134

Очень интересно ознакомиться с алгоритмами триангуляции Делоне на Basic. Если кто может поделиться опытом или дать ссылку на материалы в Интернете поделитесь пожалуйста!
Просмотров: 7008
 
Непрочитано 21.02.2011, 08:48
#2
Лиспер


 
Регистрация: 11.10.2010
Сообщений: 979


http://www.google.ru/search?source=i...D0%BC&aq=0&oq= и переводи на тот язык, который нужен...
__________________
(/= RegDate StartReadDate)
Лиспер вне форума  
 
Автор темы   Непрочитано 21.02.2011, 17:33
#3
МишаИнженер


 
Регистрация: 14.12.2008
Сообщений: 1,134


Скачал недавно программу вместе с кодом, которая строит триангуляцию контура из точек с помощью треугольников. Точки задаются нажатием левой кнопки мыши. А если нажимать правую кнопку мыши то будут указываться точки которые или лежат внутри контура или снаружи. Наружние точки окрашиваются в красный цвет, внутренние в коричневый.
Так вот надо бы както вывести на экран те треугольники которые программа создаёт в результате триангуляции. Это раз. Затем мне хочется понять: алгоритм триангуляции сделан в стандартной библиотеке Windows или этот алгоритм разработал автор программы самостоятельно?
В общем хочется всё что делает эта программа перенести на экран AutoCAD и желательно с использованием кода Basica. Хочется чтобы эта программа создавала триангуляционную сетку на экране AutoCAD! Поэтому у меня вопрос: код триангуляции стандартный и взят из библиотеки Windows или это разработка автора? И где находится этот код?
Посмотрите программу и её код в архивном файле
Вложения
Тип файла: rar win32.rar (4.02 Мб, 338 просмотров)
МишаИнженер вне форума  
 
Непрочитано 21.02.2011, 19:07
1 | #4
Александр Ривилис

программист, рыцарь ObjectARX
 
Регистрация: 09.05.2005
Киев
Сообщений: 2,413
Отправить сообщение для Александр Ривилис с помощью Skype™


Цитата:
Сообщение от МишаИнженер Посмотреть сообщение
Поэтому у меня вопрос: код триангуляции стандартный и взят из библиотеки Windows или это разработка автора? И где находится этот код?
В библиотеке Windows нет кода для триангуляции. В приведенном коде программа работает только с треугольниками, вершины которых опредлены как целые числа. Алгоритм не анализировал. Он находится в файле win32.cpp, функция triangulation. Я бы на твоем месте поискал алгоритмы триангуляции Делоне.
Посмотри здесь: http://paulbourke.net/papers/triangulate/

Последний раз редактировалось Александр Ривилис, 21.02.2011 в 19:13.
Александр Ривилис вне форума  
 
Автор темы   Непрочитано 23.02.2011, 07:05
#5
МишаИнженер


 
Регистрация: 14.12.2008
Сообщений: 1,134


Спасибо Александр!
На сайте нашёл описание алгоритма триангуляции:
Код:
[Выделить все]
subroutine triangulate
input : vertex list
output : triangle list
   initialize the triangle list
   determine the supertriangle
   add supertriangle vertices to the end of the vertex list
   add the supertriangle to the triangle list
   for each sample point in the vertex list
      initialize the edge buffer
      for each triangle currently in the triangle list
         calculate the triangle circumcircle center and radius
         if the point lies in the triangle circumcircle then
            add the three triangle edges to the edge buffer
            remove the triangle from the triangle list
         endif
      endfor
      delete all doubly specified edges from the edge buffer
         this leaves the edges of the enclosing polygon only
      add to the triangle list all triangles formed between the point 
         and the edges of the enclosing polygon
   endfor
   remove any triangles from the triangle list that use the supertriangle vertices
   remove the supertriangle vertices from the vertex list
end
И попробовал перевести этот алгоритм на русский язык:
Код:
[Выделить все]
треугольная подпрограмма
вход: список вершины
продукция: список треугольника
   калибруйте список треугольника
   определите супертреугольник
   добавьте вершины супертреугольника до конца списка вершины
   добавьте супертреугольник к списку треугольника
   для каждого типового пункта в списке вершины
      калибруйте буфер края
      для каждого треугольника в настоящее время в списке треугольника
         вычислите треугольник circumcircle центр и радиус
         если пункт находится в треугольнике circumcircle тогда
            добавьте три края треугольника к буферу края
            удалите треугольник из списка треугольника
         endif
      endfor
      удалите все вдвойне указанные края из буфера края
         это оставляет края многоугольника приложения только
      добавьте к списку треугольника все треугольники, сформированные между пунктом 
         и края многоугольника приложения
   endfor
   удалите любые треугольники из списка треугольника, которые используют вершины супертреугольника
   удалите вершины супертреугольника из списка вершины
конец
Что такое супертреугольник? Можно ли более понятно перевести этот алгоритм?
МишаИнженер вне форума  
 
Непрочитано 23.02.2011, 08:36
#6
AlexV

Инженер
 
Регистрация: 02.10.2008
С-Пб
Сообщений: 3,692


треугольная подпрограмма - в этом что-то есть!
"каким был бы программный код, если бы Билл Гейтц сотоварищи жили и творили в России"
Интересно, а чего endif с endfor не превратилися в "конецесли" с "конецдля"?
__________________
...Не пытайся гнуть ты ложку,
Не вяжи её узлом.
Ложка - ложка понарошку,
А по правде, - это лом!
AlexV вне форума  
 
Непрочитано 23.02.2011, 09:17
1 | #7
Александр Ривилис

программист, рыцарь ObjectARX
 
Регистрация: 09.05.2005
Киев
Сообщений: 2,413
Отправить сообщение для Александр Ривилис с помощью Skype™


МишаИнженер, посмотри здесь на странице 32. И пользуйся поиском.
И чем тебя не устроили готовые алгоритмы на VB, ссылку на которые я привел?
Александр Ривилис вне форума  
 
Автор темы   Непрочитано 23.02.2011, 13:29
#8
МишаИнженер


 
Регистрация: 14.12.2008
Сообщений: 1,134


Спасибо Александр!
На сайте который Вы мне посоветовали нашёл код на Basice и скопировал его в VBA!
Получилась програмка триангуляции Делонэ
Но вот почему иногда появляются перекрывающиеся треугольники?
С самого начала появлялась ошибка в следующем коде:
Код:
[Выделить все]
xc = (m1 * mx1 - m2 * mx2 + my2 - my1) / (m1 - m2)
Если знаменатель (m1 - m2) становился равным 0
Чтобы избежать частого появления ошибок изменил код на следующий:
Код:
[Выделить все]
'Спорный код в программе
   If (m1 - m2) <> 0 Then
      xc = (m1 * mx1 - m2 * mx2 + my2 - my1) / (m1 - m2)
   Else
'Неизвестно почему может из-за этой строки иногда появляются перекрывающиеся треугольники
      xc = (m1 * mx1 - m2 * mx2 + my2 - my1)
   End If
Помогите разобраться почему появляются перекрывающиеся треугольники!
Модуль DVB посмотрите в прикреплённом файле
Миниатюры
Нажмите на изображение для увеличения
Название: Триангуляция в AutoCAD.jpg
Просмотров: 222
Размер:	70.6 Кб
ID:	54260  Нажмите на изображение для увеличения
Название: Триангуляция квадратов.jpg
Просмотров: 155
Размер:	53.9 Кб
ID:	54262  
Вложения
Тип файла: zip ТриангуляцияДелонэ.zip (71.3 Кб, 196 просмотров)

Последний раз редактировалось МишаИнженер, 23.02.2011 в 13:52.
МишаИнженер вне форума  
 
Непрочитано 23.02.2011, 14:06
#9
Александр Ривилис

программист, рыцарь ObjectARX
 
Регистрация: 09.05.2005
Киев
Сообщений: 2,413
Отправить сообщение для Александр Ривилис с помощью Skype™


Михаил. Я не пишу на VB/VBA, а разбираться с чужим алгоритмом на VBA у меня нет возможности. Прошу прощения. В любом случае проверка
Код:
[Выделить все]
If (m1 - m2) <> 0 Then
мне не нравится. Проверять IMHO следует абсолютную величину и не с нулём, а с каким-нибудь достаточно малым числом. Например, с 0.000001
Т.е. что-то такое:
Код:
[Выделить все]
If Abs(m1 - m2) > 0.000001 Then
P.S. Всё же немного поглядел на код. Во первых все координаты в целых числах (Long). Их явно нужно поменять на плавающие (Double). Потом не обрабатывается (попросту не учитывается) координата Z. В результате треугольники плоские. Ну а смотреть на имена функций/переменных написанных русскими буквами я просто не могу без слёз.

Последний раз редактировалось Александр Ривилис, 23.02.2011 в 14:16.
Александр Ривилис вне форума  
 
Автор темы   Непрочитано 23.02.2011, 20:52
1 | #10
МишаИнженер


 
Регистрация: 14.12.2008
Сообщений: 1,134


Спасибо Александр!
Учёл Ваши замечания насчёт Long, изменил на Double!
Сделал новый алгоритм вычисления центра описанной окружности.
Программа стала работать значительно лучше!
Можете сами убедиться по картинке триангуляции прямоугольника. Все треугольники поляризованы и гипотенузы во всех треугольниках параллельны!
Но правда если взять всего два таких треугольника и сначала поделить их на 4 одинаковых то затем никак не получается поделить эти одинаковых 4 треугольника на более мелкие!
Попробуйте может у кого получится.
Самое интересное почему это не получается. Кто может разобраться?
Миниатюры
Нажмите на изображение для увеличения
Название: Триангуляция с улучшенными треугольниками.jpg
Просмотров: 187
Размер:	59.6 Кб
ID:	54284  Нажмите на изображение для увеличения
Название: Почему эти треугольники не делятся на более мелкие.jpg
Просмотров: 135
Размер:	59.1 Кб
ID:	54285  
Вложения
Тип файла: zip ТриангуляцияДелонэ.zip (79.0 Кб, 233 просмотров)
МишаИнженер вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Триангуляция Делоне на Basice



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Построение цифровой модели рельефа по растровой карте andrik75 Программирование 50 12.09.2015 21:23
Триангуляция Lulkka Программирование 7 08.03.2013 13:01
Триангуляция в ЛИРЕ again X-DeViL Лира / Лира-САПР 4 13.11.2006 10:48
Триангуляция плит перекрытий Борик Прочее. Программное обеспечение 3 19.01.2006 20:40
Триангуляция точечного облака scatler Прочее. Программное обеспечение 15 04.04.2005 09:18