Bu görüntü gibi bir figür sağlayan bir Algoritma biliyor mu?


9

Herkes bir dizi belirli nokta (3D dizi) verildiğinde, resimdeki gibi figür yapabilen bir algoritmanın nasıl oluşturulacağını biliyor mu?

resim açıklamasını buraya girin


4
Bu bir şey, aradığınız şey: blog.andreaskahler.com/2009/06/…
Luke San Antonio Bialecki

3
@LukeSanAntonio Bir cevap olarak bu yüzden lütfen oy verebilirsiniz;) (ancak sadece bağlantı değil, bir cevap için algoritmanın bazı minimum açıklaması gerekli olacaktır)
yannis

1
@YannisRizos Yapardım, ama bu tür bir şey hakkında herhangi bir bilgi ya da deneyimim yok, bu yüzden size yeterli bir açıklama yapamadım (iyi yapabilirim, ama diğerleri çok daha iyi yapabilirdi) Bağlantıyı bilmemin tek nedeni çünkü şeklin adını Blender'dan biliyordum ( wiki.blender.org/index.php/Doc:2.4/Manual/Modeling/Meshes/… )
Luke San Antonio Bialecki 20:13

bir 3B nesneden gölge oluşturmak her gün yapılır, gölge eşleme ve gölge hacmini kontrol edin , ancak daha fazla gölge oluşturma algoritması vardır
cırcır ucube

Yaratmak istediğim Gölge değil, fiziksel nesne. 3D baskı yapacağız.
user88794

Yanıtlar:


5

Savaştan sonra buraya geliyor, ancak henüz kabul edilmiş bir cevap olmadığından ve @ Luke'un hak ettiği temsilcisi almayı reddettiğini görünce, sağladığı bağlantının kısa bir özeti burada.

Yani tam algoritma burada mevcuttur:

http://blog.andreaskahler.com/2009/06/creating-icosphere-mesh-in-code.html

Fikir, ağınızı 20 yüze sahip bir küre veren basit bir yöntemle önyüklemek ve tatmin olana kadar rafine etmektir.

Şekli ön yükleme

Bir icosahedron ile başlarsınız . Vikipedi makalesinde dediği gibi, üç özdeş ve dik dikdörtgen çizerek köşeleri elde edebilirsiniz. Her biri 4 köşeli 3 dikdörtgeniniz vardır -> 12 köşe.

Wikipedia resmi:

ikosahedron

Örneğin, Z plan noktaları (a, b dikdörtgen uzunluklarıdır):

  • (+ a, + b, 0)
  • (-a, + b, 0)
  • (+ a, -b, 0)
  • (-a, -b, 0)

Şimdi hala 20 yüzü bulmalısın. Bu okuyucuya bir alıştırma olarak bırakılmıştır: p

Şeklin hassaslaştırılması

Artık temel bir küreye sahip olduğunuza göre, çokgen eklemek isteyebilirsiniz. Bunu bu basit algoritma ile yaparsınız:

for each iteration:
    # each iteration multiplies by 4 the number of faces
    for each edge at the current iteration:
        split the edge in two
        replace the middle point on the sphere

Orta noktayı bulmak için birim küre (orta (0, 0, 0), yarıçap 1) oluşturmak istediğimizi varsayalım.

middlePoint(p1, p2):
    middle = Point((p1.X + p2.X / 2), # same for y, z)
    radius = sqrt(middle.X^2, middle.Y^2, middle.Z^2)
    return Point(middle.X / radius,  # same for y, z)

Her yinelemede, yüzleri yeniden yapılandırmamız gerekebilir, ancak oldukça kolaydır. Her yüz dörde ayrılır:

yüz temizliği

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.