Tünel merkez hattını mı arıyorsunuz?


19

Tünelleri temsil eden 'polylines' (her satır sadece bir köşe noktası listesi) içeren bazı harita dosyalarım var ve tüneli 'orta çizgiyi' (kabaca aşağıda kırmızı renkte gösterilmiştir) bulmaya çalışıyorum.

alternatif metin

Delaunay üçgenleme kullanarak geçmişte bazı başarılar yaşadım ama (genel olarak) harita verilerimin kolay / sık değiştirilmesine izin vermediği için bu yöntemi kullanmak istemiyorum.

Bunu nasıl yapabileceğime dair bir fikrin var mı?

Oldukça ham C ++ ile çalışıyorum.


gis.stackexchange.com/q/177/162 ayrıca aradığınızı da ele alır: iskelet algoritmaları .
julien

3
Bence SO ile çapraz bağlantı alakalı, çünkü orada da cevaplar var stackoverflow.com/questions/3983613/find-tunnel-center-line
Dr. belisarius

@julien: Bunu cevabınıza zaten bağladınız. Ben okudum, ama bu benim belirli bir soruya cevap vermiyor (ki, yeniden ifade etmek için, 'Ben zaten MAT bulmak için nasıl biliyorum - ama kimse Delaunay olmayan bir algoritma biliyor muyum merak ediyorum - yani bir lib - sorun benim kodum değil;)] bu yerelleştirilmiş değişiklikler için etkilidir '). SO da oldukça cevap vermedi ama çok çaba aldı ve bana düşünmek için bol bol verdi, bu yüzden daha iyi bir şey gelene kadar o adama onay verdi. Aşağıdaki cevapların hiçbiri o kadar iyi değildir (ki bu benim hatam da olabilir).
11:28

Yanıtlar:


6

Medial Eksen Dönüşümüne iyi bir yaklaşım getirdiniz. Delaunay nirengi gerçekten de iyi bir yaklaşım sunuyor. (Temel zorluk, MAT bölümlerinin sadece çizgi parçaları değil, parabol parçaları olmasıdır.)

Akademik literatürde çalışma koduna (genellikle C / C ++ I hatırlıyorum) yapılan referanslarla karşılaştım. Google Akademik'te bir arama yapın ve eski makaleleri arayın (yenileri 3D hesaplara odaklanıyor gibi görünüyor).


Delaunay'ı kullanan bazı çalışma kodlarım var. Gerçekten başka yollar olup olmadığını soruyorum.
sje397

1
@ sje397 Her şeyden önce, Delaunay sorunu sadece yaklaşık olarak çözüyor, bu nedenle sadece bu nedenle daha iyi kod araştırmaya değer olabilir. İkincisi, başka yollar da var. İki kısaca özetleyebilirim. Ben de bahsetmedim çünkü ikisi de çok daha verimsiz ve daha kötü sonuçlar veriyor. Muhtemelen ikinci yöntem, oldukça hızlı bir dinamik çözüme uygundur.
whuber

4

"Çokgen iskeletler" içine bakmaya değer olabilir.

Http://www.cgal.org/Manual/3.2/doc_html/cgal_manual/Straight_skeleton_2/Chapter_main.html adresinde bazı C ++ kaynak örnekleri var


Teşekkürler underdark. CGAL'a daha yakından bakacağım. Ancak harita verilerim değiştiğinde yeniden hesaplamanın pahalı olmaması şartıdır.
sje397

CGAL oldukça hızlıdır - anında hesaplama mümkün olmalıdır. Aksi takdirde, sözde 'kinetik veri yapılarına' bir göz atabilirsiniz: cgal.org/Manual/3.3/doc_html/cgal_manual/…
julien

"İskelet" MAT için kullanılan bir başka terimdir. "Medial eksen dönüşümü" için arama yapmak, deneyimimdeki "iskelet" aramalarından daha fazla ve daha iyi isabetler verdi.
whuber

"iskelet" daha genel görünüyor - MAT iskelet için sadece bir algoritma, değil mi? Her neyse, konu değil ...!
julien

CGAL lisansı kısıtlayıcı görünüyor (pahalı - bu ticari bir yazılımdır).
sje397
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.