Voronoï diyagramından nasıl üçgenlenir?


13

Bir dizi noktadan ( Boost.polygon ile ) bir Voronoï diyagramı hesapladım .

Her Voronoï kenarı için her bir hücre merkezini birbirine bağlayan bir Delaunay üçgenlemesi bulmaya çalışıyorum, ancak bazı kenarları özlüyorum.

Aşağıdaki görüntüde, kırmızı noktalar benim başlangıç ​​noktam, mavi çizgiler Voronoï kenarları (sonsuz kenarları yok saydım) ve yeşil çizgiler üçgenleme kenarlarıdır (her mavi kenar için bir yeşil kenar, iki hücre kaynağını birbirine bağlar).

Çapraz kenarların eksik olduğunu görebiliriz. Neyi kaçırıyorum?

voronoi diyagramı

Yanıtlar:


19

Diyagramınızdaki merkez nokta Voronoi diyagramının dejenere bir kenarıdır. Düzensiz bir nokta bulutu için bir Voronoi diyagramı oluşturursanız, her tepe noktası derece 3'e sahip olacaktır. Derece 4 (veya daha fazla) olan bir tepe noktası yalnızca iki (veya daha fazla) köşe çakıştığında gerçekleşebilir. Bu, aralarında sıfır uzunlukta bir kenar olduğu anlamına gelir. Ancak bu kenarın Delaunay üçgenlemesinde yine de karşılık gelen bir kenarı olmalıdır. Sorun, sıfır uzunluklu kenarın ilişkili bir yönü olmadığı için, iki olası kenardan hangisini seçtiğiniz keyfi olması.

Neden bahsettiğimi görselleştirmek için, düzenli olarak daha az aralıklı dört noktadan başlamayı (yalnızca derece-3 köşelerle başlayacağımız şekilde) ve yavaş yavaş normal konumlarına çevirmeyi düşünün.

Bunu iki farklı şekilde yapabiliriz, her ikisi de diyagramınızdaki dejenere duruma yol açar. Her ikisi de dejenere vaka için geçerli sınırlar olan iki farklı Delaunay üçgenlemesi ile sonuçlandığını göreceksiniz:

resim açıklamasını buraya girinresim açıklamasını buraya girin

Kodunuzun bu dejenere davayı bir nedenden ötürü eksik olduğunu varsayıyorum, ancak aslında Delaunay üçgenlemesini Voronoi diyagramından nasıl hesapladığınızı görmeden size bundan daha fazla işaret etmek imkansız.

Ayrıca daha yüksek dejenerasyonlara sahip olmanın (bir daire etrafında eşit açılarda dağılmış dörtten fazla nokta) muhtemelen ek dikkat gerektireceğini unutmayın:

resim açıklamasını buraya girinresim açıklamasını buraya girin

Bu animasyonlar ayrıca (dejenere olmayan bir durumda bile), karşılık gelen Voronoi ve Delaunay kenarlarının sonlu kapsamları içinde gerçekte geçmediğini gösterir. Bu, uçtaki normal çokgeni üçgenleyen 2 (veya 3) kenarın aslında merkezde olan birkaç dejenere kenara karşılık geldiğini görmek zorlaştırabilir. Ayrıca toplamda beş farklı beşgen üçgeni ve altıgenin 14 üçgeni olduğunu unutmayın (her ikisinin de dejenere olmayan bir üçgenleme deforme ederek elde edilip edilemeyeceğini bilmiyorum).

Düzenle (OP ile)

Boost.polygon ile hesaplanan Voronoi diyagramları , her bir Voronoi tepe noktasından geçebilir ve her kenar bu köşelere (saat yönünde veya saat yönünün tersine) bağlanabilir. Bu şekilde, her kenar çifti için bir üçgen oluşturmak mümkündür (bağlı iki kenar 3 hücreye bağlanır).


Burada da cevap verebilirsiniz yoksa diğer sorumu silerim.
arthur.sw

3
@ arthur.sw Çapraz gönderme genellikle SE'de önerilmez, bu yüzden silmenin daha iyi bir seçenek olacağını varsayalım.
Martin Ender

etkileşimli bir voronoï diyagramı oluşturucu: alexbeutel.com/webgl/voronoi.html
arthur.sw

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.