TL; DR BSP ağaçları kullanarak boole işlemleri gerçekleştirmeniz gerekir.
Görünüşe göre burada Yapıcı Katı Geometri'den bahsediyoruz . CSG'yi ticari düzeyde uyguladım, bu yüzden bu konuda bir iki şey biliyorum.
CSG ile ilgili klasik kağıda BSP Ağaçlarının Birleştirilmesi Çokyüzlü Set Operasyonlarını Getirir , dürüst olmak gerekirse, burada açıklamak çok fazladır, ancak kısaca konuşmak gerekirse, algoritma ikili uzay bölümleme ile aynı düzlemde yer alan çokgenlerle ilgilidir, temelde her çokgen ağdan bir BSP ağacı. İkinci adım, bu BSP ağaçlarının birleştirilmesidir; sadece bir ağacı alıp diğerine yerleştirirsiniz. Algoritma daha sonra düğümleri bölmek ve çıkarmak için her bir yaprak düğümü ile nasıl başa çıkılacağını açıklamaya devam eder, son şekilde gerekli olmayan düğümler kaldırılır, diğerlerine uygun üst öğe verilir.
Fakat bekle! Bu kağıt temel olarak çokgen örgüler ve 3D düzlemler hakkında konuşuyor, HAYIR?
Algoritma herhangi bir boyuta genelleştirilebilir, bu nedenle 2B durumunuzda ikili bölümler olarak düzlem yerine çizgi segmentlerini kullanmak kolaydır. Böylece her çokgen, ikisinin birleştirileceğinden daha fazla BSP ağacına dönüştürülecektir. Son olarak, nihai çokgeni oluşturmak için ortaya çıkan ağacı gezdirirsiniz,
Bu algoritmanın ve CSG'nin genel olarak oluşturma ve kafes yüzlerini doğrudan ele almadığını ve gerçekten hazır olmadığını unutmayın, bu nedenle son BSP ağaçlarının yüzlerini çıkarmanız gerekir. Ayrıca ışın izlemeyi CSG sonucunu oluşturmak için daha kolay bir yaklaşım olarak görüyorum, ışınları sadece yüzleri çıkarmak ve aslında bölmek yerine ağaçtan geçmek için ihtiyacınız var (sadece ikili bölümlerle uğraştığımızı unutmayın).
Sayısal sağlamlık ile ilgili. İki tür geometrik hesaplama olduğunu not etmek iyidir,
- İnşaata dayalı olanlar, önceki bir operasyonun sonucuna göre bir şekil inşa edersiniz . Örneğin
y = sqrt(x)
ve sonra y
yeni bir işlemde kullanın . Buna inşaat denir; sorun, sayısal hataların hızlı bir şekilde birikmesidir.
- Alternatif olarak , bunun yerine tahminleri kullanan işlemler vardır , temelde inşaat kullanmak yerine, bir koşulun doğru / yanlış olup olmadığını sorarsınız ve farklı değerlerde aynı değeri kullanırsınız. Klasik testler arasında incircle ve oryantasyon testi; bu, özellikle tek veya çift kesinlik kullanıyorsanız sayısal hatalardan şüphelenir, ancak genellikle çok daha iyi sonuçlar verir. hıza ve isabetliliğe göre değişen diğer çözümler mevcuttur. Doğru sonuçlar vermek için düzlem tabanlı bir geometri kullanarak yapımdan kaçınan son makalelerden biri. Gazeteden de alıntı yapacağım:
Poligonal kafeslerin düzlem tabanlı temsili kavramı ilk olarak Sugihara ve Iri tarafından tanımlanmıştır [SI89]. Boole ifadelerinin değerlendirilmesi gibi kafeslerle temsil edilen katıların topolojisini değiştirmeyi gerektiren görevler söz konusu olduğunda, bu tür bir temsil önemli bir avantaj sağlar: ortaya çıkan polihedronu elde etmek için yeni bir birincil geometri bilgisi oluşturulmamalıdır
Son olarak, BSP CSG uygulamanızı başlatmak isterseniz, BSP SSS'lerinden başlamanızı tavsiye ederim .