Bir kutu, bir koni ve alıntıladığınız tüm ilkel bir şeklin kenarlarını ve yüzlerini oluşturmanın yolu, köşeleri oluştururken aynı zamanda onları oluşturmaktır. Aslında, köşeleri mantıklı bir şekilde, kenarları ve yüzleri buna göre hesaplamayı kolaylaştıracak şekilde oluşturmalısınız.
Uzayda bir dizi noktayı girdi olarak alan ve üzerinde " nokta seti üçgenleme " olarak adlandırılan algoritmalar vardır , ancak nokta seti üçgenleme problemi NP-tamamlanmıştır , böylece kenarları ve yüzleri yapmak daha hızlıdır sadece köşeleri hesaplamak ve bir algoritmanın işi yapmasına izin vermektense. Sadece bu çözümün var olduğunu bilmenize izin verin.
Bu verimsiz çözümün yanı sıra, aşağıdaki örneklerde olduğu gibi ilkelleri yalnızca her durum için ele alabileceğinizi düşünüyorum.
Kafes köşeler ve yüzlerdir . Ağınız yüz oluşturmayan çizgiler içermediği sürece kenarlar yüzlerin açıklamasında bulunur. Köşeler, 3 kayan nokta koordinatının tuplesidir. Kenarlar sadece köşelere yapılan referans çiftleridir, ancak yine de kesinlikle onlara ihtiyacınız olmayacaktır. Örneğin köşelerinizin dizine alınmış bir dizide olduğunu varsayalım. Peki kenarlarınız o dizinin endeks çiftleri olabilir. Yüzler, dizinlenmiş dizi durumundaki köşelere veya dizinlerin üçlülerine yapılan başvuruların üçlüleridir .
Bu ilkel şekillerin her birini oluşturan köşeleri, kenarları ve yüzleri sayabilmelisiniz, çünkü bunları sayabilmeniz, nesneler ile bunları oluşturacağınız yöntemi tasarlamanıza, döngüler ve göreceğimiz diğer araçlar.
koni
N + 2 köşeli, 3n kenarlı ve 2n yüzlü bir koni için :
- İki ayrı köşe yapın.
- İlk iki köşe arasındaki bölüme dik bir düzlem içinde olan köşelerden birinin (temel tepe noktası) etrafında bir daire yapın. Umarım trigonometri kullanarak bir daire oluşturabilirsiniz, değil mi? Bu zaten koninin tüm köşeleri. Bu aynı zamanda tüm kenarların üçte biri ( dairede n kenar ve toplamda 3n ) var.
- Temel tepe noktasından daire içindeki n köşeye kadar n kenar yapın . Bunu yaparken yüzlerin yarısını (yani n yüz) yapabilirsiniz.
- Uç tepe noktasından daire içindeki n köşeye kadar n kenar yapın . Yüzlerin diğer yarısını (bu n yüz) yapabilirsiniz.
1)
2)
3)
4)
Sonuç:
Daireyi oluşturan döngüyü çalıştırırken kenarları ve yüzleri de oluşturabilirsiniz. Aynı karmaşıklık, aynı şey. Çember üzerinde bir tepe yapın, köşeler dizinize kaydedin, istediğiniz kenarı (endeks çifti) bir dizi indeks çiftine ekleyin ve son olarak karşılık gelen yüzü dizin üçlüsü dizinize ekleyin . Bir sonraki tepe noktasına geçin.
Silindir ve tüp: aynı işi iki kez yapmamak ve dörtlü
Yine, tüp için, silindirin üst veya alt diskinin merkezi olacak bir tepe noktası ve bir daire ile başlar:
- Bir tepe noktası yapın.
- Köşenin etrafında bir daire yapın. Dairenin birbirini izleyen köşeleri arasına ve orta tepe noktası ile her daire tepe noktası arasına kenarlar ekleyin (kenarlar istiyorsanız). Orta tepe noktasından yapılan köşelerin her üçlüsü ile daire üzerinde birbirini izleyen iki köşe arasına yüzler ekleyin.
- Tüm bunları çoğaltın, kopyayı yeni yaptığınız tabana dikey yönde, istenen silindirin uzunluğuna çevirin.
- Üst ve alt kısımları birleştirin.
Üst ve alt arasında bağlantı kurmak için, birbirine bakan köşe çiftleri çiftleri arasında dörtlüler yapmanız gerekir. Öyleyse bir düşünün ve neden kendinizi dört köşeden iki üçgen yüz yapan bir işlev yapmıyorsunuz?
Bitti. Bu kez, aynı yapının (daire + merkez) bir kısayol almak için bir silindirde iki kez göründüğünü fark ediyoruz. Gerekli olan koninin aksine, tüm köşeleri, kenarları ve yüzleri elle yapmak zorunda değiliz .
Bu tembellik prensibini takiben, dairenin dörtte birini yapmak ve çoğaltmak ve tekrar, çok basit dönüşümlerle (herhangi bir daire için de koni ile de geçerlidir) tam bir daire yapmak da mümkündür, ancak bu o kadar karmaşık bir şekil değil.
Yapımlarını kolaylaştırmak için her zaman yaptığınız nesnelerin geometrik özelliklerini kullanmalısınız . Yani simetrileri ve değişmezleri .
Bir silindir için, sadece temel tepe noktasını yapmayın, sadece daireyi yapın, çoğaltın, kopyayı çevirin, dörtlü yapın, bitti.
Küre ve kapsül: karmaşıklık katmak, yine de iki kez aynı iş değil
Bir kapsül oluşturmak için, bir UV küre oluşturmak, iki yarıya bölmek, ilk yarıyı çevirmek ve daha sonra ikisini kapsüllerin kenarlarıyla bağlamak istiyoruz.
Yine kürenin sadece bir sekizinci (!!) yapmak, daha sonra çoğaltmak ve tersine çevirmek ve daha sonra 4 adımda tam bir küre elde etmek için başka bir eksen, vb. Hariç sonucu çoğaltmak ve tersine çevirmek mümkündür (sekizinci oluşturmak) , çoğaltın ve üç kez ters çevirin). Belki aşırıya kaçmak, ama daire durumunda olduğundan daha az.
Basit bir UV küresi:
Aslında bunun sadece yarısını yapıyoruz (örneğin), yarısını çoğaltıyoruz, kopyayı baş aşağı çeviriyoruz ve kapsülün uzunluğuna çeviriyoruz:
Üst ve alt yarıyı bağlarız:
Gerçek (biraz) sıkı çalışma, bir küre yapmaya giden trigonometreden gelir. Bir UV küresine ait tüm köşelerin kümesi, formun tüm noktalarının kümesi olarak tanımlanabilir:
burada R , kürenin yarıçapıdır ve belirli bir pozitif çift tam sayı N için, sabit
θ = × π / N ,
k ve n , k 0 ila 2N-1 arasında değişen ve n , -N / 2 ila + N / 2 arasında değişen tamsayılardır .
Bir yarım küre veya bir küre bir sekizinci yapmak için, k ve n tarafından alınan değer kümesini kısıtlamanız gerekir .
Eğer k tam sayılar değil, gerçek sayılar olsaydı, sadece yüzeyindeki köşeleri değil, bütün bir küreyi elde edersiniz. Burada yaptığımız ilkelin yüzey denklemini rasterleştirmektir .
Korkunç torus : gördüklerimizden sonra kolay!
Yine, daha fazla trigonometri, daha fazla köşe noktası, daha fazla dörtlü, daha fazla simetri, daha fazla değişmez ... daha fazla geometri! Bir torusun yüzeyinin denklemini bulun, düzgün bir şekilde "rasterleştirin", torusun (açık) simetrilerini kullanarak problemi basitleştirin ve son olarak, az önce tanımladığınız köşe kümeleri arasında dolaşın ve kenarları ve yüzleri istediğiniz gibi yapın Git!
Görmek? Tamamen anlaşılır.