Ефективна триангулация на Делоне

Търся .NET имплементация, която изгражда триангулация на Delaunay от набор от точки.

Вече тествах няколко реализации, но всички те работеха само за малък брой точки (до 20 000).

Имам нужда от нещо, което може да се справи с 500 000 точки за разумно време.


person AlonH    schedule 05.09.2011    source източник
comment
странно е, че може да се справи само с 20 000 точки; има само O(n*log(n)) време на работа   -  person Simone    schedule 05.09.2011
comment
Опитахте ли внедряването на C# на s-hull.org? Предполага се, че алгоритъмът, който използва, е бърз.   -  person CodesInChaos    schedule 05.09.2011
comment
Използвал съм алгото s-hull.org. Производителността се влошава значително, след като стигнете до 100 000 или повече точки, поради феноменалния брой рекурсии, които се случват в кода. Не знам как да го победя. Чух, че има друг алго, който намалява рекурсивността на кода, не съм сигурен как се казва (може да е De Wall или нещо подобно).   -  person code4life    schedule 07.09.2011
comment
Използвали ли сте qhull? Въпреки че това не е C#.   -  person Joan Venge    schedule 14.01.2012
comment
Използвах Triangle и ми свърши добра работа. cs.cmu.edu/~quake/triangle.html Успех! Максим   -  person Maxim Eliseev    schedule 09.02.2012
comment
Какво, за този конкретен проблем, е разумен срок, btw? Можете ли да живеете с 60 секунди обрат? 1 секунда? 100ms?   -  person Mike    schedule 09.02.2012
comment
Току-що написах C# триангулатор, който отнема ~30 секунди на 500K входни точки от данни, непаралелизирани. Не знам дали е полезно или не, мога да го публикувам.   -  person Mike    schedule 10.02.2012
comment
@Mike Това е доста бавно. Триъгълникът трябва да управлява толкова много точки за около 1s.   -  person David Heffernan    schedule 18.03.2012
comment
@Mike, 500 000 точки и 30 секунди, мисля, че представянето е наистина добро, можеш ли да го споделиш.   -  person sendreams    schedule 27.06.2015


Отговори (5)


Ако искате да конструирате 2D триангулация на Делоне, използвайте Triangle.Net. Това е директен C# порт на известната програма Triangle на Шевчук.

person Ashwin Nanjappa    schedule 04.07.2013
comment
Изглежда, че Triangle.Net е лицензиран под лиценза на MIT, но очевидно това е директно пренасяне на Triangle към C#, а Triangle не е лицензиран под MIT. Съмнявам се, че е законно. - person Eagle-Eye; 20.07.2014
comment
В крайна сметка аз самият използвах Triangle.NET. Използвайки го за Unity 5, трябваше да коригирам само две малки неща, за да накарам .Net 4.5 да работи с Unity. - person Mikael Högström; 07.08.2015
comment
@MikaelHögström бихте ли ни казали какво поправихте в triangle.net, за да работи с unity? - person seek; 21.02.2016
comment
Не помня точно какво, но доколкото си спомням не беше много трудно, струва ми се час-два. Ако се затрудните, мога да споделя моя код с вас! - person Mikael Högström; 23.02.2016
comment
Това е библиотеката, която най-накрая проработи за мен, особено портът на Unity, намерен в github: github. com/parahunter/triangle-net-for-unity Създадох много по-органични резултати, които не приличат на решетка, в начинанията ми за генериране на терени. Благодаря, че публикувахте това. Беше доста лесен за използване и DelaunayDemo в папката Scenes на този порт на Unity е на първо ниво. - person Joseph Knight; 30.04.2016
comment
Тъй като @MikaelHögström и др. не са документирали корекциите си и основният сайт все още има грешки в текущата версия, ето връзка към двете корекции, които трябва да направите, отнема около 2 минути: triangle.codeplex.com/discussions/651181 - person Adam; 09.07.2016
comment
За Unity 5 използвайте това, то съдържа всички необходими корекции . Тестван с Unity 32 бита 5.5 и 5.6 на Windows 7. - person Vignesh; 25.06.2017
comment
@Eagle-Eye: Наистина. По-специално, оригиналният уебсайт казва: Моля, имайте предвид, че въпреки че Triangle е свободно достъпен, той е защитен с авторски права от автора и не може да се продава или включва в търговски продукти без лиценз. - person O. R. Mapper; 02.07.2018

Търсих същото и намерих библиотека на C# 4.0, наречена MIConvexHull:

„Алгоритъм и библиотека за изпъкнала обвивка за 2D, 3D и по-високи измерения. Кодът може да се използва и за изчисляване на триангулациите на Delaunay и мрежите на Вороной на входните данни. Бенчмарковете показват, че кодът на изпъкналата обвивка и кодът за триангулация с 4 и по-високи измерения са наравно или по-добро от решението, предоставено от C++ библиотеката CGAL."

http://miconvexhull.codeplex.com/

Актуализация септември/2016 г.:

Тази библиотека се премести в Github и изглежда, че вече е пусната под лиценза на MIT (някои от примерите са GPL). Можете да намерите най-новата версия тук:

https://github.com/DesignEngrLab/MIConvexHull

Документацията всъщност е в изходния код и е лесна за използване. Ето съответния изходен файл за триангулацията на Delaunay:

https://github.com/DesignEngrLab/MIConvexHull/blob/master/MIConvexHull/Triangulation.cs

Ако искате да видите оригиналната версия от 2012 г. Разгледайте тук:

http://miconvexhull.codeplex.com/SourceControl/changeset/view/e1b26677eb1a#MIConvexHull/Triangulation/Triangulation.cs

person Pablo    schedule 17.08.2012
comment
Все още върши работа. Той настройва диаграма от 500K точки за секунди. - person OzrenTkalcecKrznaric; 22.10.2015
comment
Без изтегляния, без документи. Страницата за изтегляне гордо казва, че не можете да я изтеглите и вместо това от вас се изисква да интерпретирате патентования формат на проекта, да се досещате, докато намерите някои примери за източник, и да проектирате обратно инструкциите. И това е GPLv3, което изключва много употреби. Не е страхотна библиотека! - person Adam; 09.07.2016
comment
Ако погледнете репото на Github, ще откриете, че изходният код е документиран и е лицензиран под MIT. - person Pablo; 10.09.2016

Опитвали ли сте NetTopologySuite

person Mohit Vashistha    schedule 28.01.2012
comment
Това е обвивка за JTS - която очевидно не поддържа 3D - tsusiatsoftware.net/ jts/jts-faq/jts-faq.html - person JumpingJezza; 17.03.2016

Има реализация на C#, която може да ви помогне да генерирате диаграма на Вороной, както и триангулация на Делоне: http://www.codeproject.com/Articles/11275/Fortune-s-Voronoi-algorithm-implemented-in-C

person blackbada_cpp    schedule 01.03.2012

Има решение, наречено G#.

Има триангулации на Delaunay (също с разделителни линии). От графиката на ефективността на техния уебсайт трябва да можете да триангулирате 500 000 точки за около 30 секунди.

person wackmc    schedule 04.11.2012