Czy ktoś zna algorytm, który pozwala na rysowanie takich jak ten obraz?


9

Czy ktoś wie, jak stworzyć algorytm zdolny do wykonania figury tak jak na zdjęciu, gdy otrzyma zestaw określonych punktów (macierz 3D)

wprowadź opis zdjęcia tutaj



3
@LukeSanAntonio Opublikuj to jako odpowiedź, abym mógł go zagłosować;) (ale nie tylko link, konieczne będzie jakieś minimalne wyjaśnienie algorytmu)
yannis

1
@YannisRizos Chciałbym, ale nie mam żadnej wiedzy ani doświadczenia w tego typu sprawach, więc nie mogłem dać ci odpowiedniego wyjaśnienia (cóż, mogłem, ale inni mogliby zrobić znacznie lepiej). Jedynym powodem, dla którego wiedziałem, że link jest ponieważ znałem nazwę kształtu z Blendera ( wiki.blender.org/index.php/Doc:2.4/Manual/Modeling/Meshes/… )
Luke San Antonio Bialecki

tworzenie cienia z obiektu 3D odbywa się codziennie, sprawdź mapowanie cienia i objętość cienia , ale dostępnych jest więcej algorytmów tworzenia cienia
maniak

To nie Cień, który chcę stworzyć, to obiekt fizyczny. Zamierzamy go wydrukować w 3D.
user88794 21.04.13

Odpowiedzi:


5

Przybywając tutaj po bitwie, ale ponieważ nie ma jeszcze akceptowanej odpowiedzi i widząc, że @Luke odmawia otrzymania przedstawiciela, na który zasługuje, oto krótkie streszczenie linku, który podał.

Pełny algorytm jest dostępny tutaj:

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

Chodzi o to, aby uruchomić siatkę za pomocą prostej metody, która daje kulę z 20 twarzami, a następnie udoskonalać ją, aż będziesz zadowolony.

Bootstrapping kształtu

Zaczynasz od dwudziestościanu . Jak mówi artykuł w Wikipedii, wierzchołki można uzyskać, rysując trzy identyczne i prostopadłe prostokąty. Masz 3 prostokąty, każdy z 4 narożnikami -> 12 wierzchołków.

Ilustracja z Wikipedii:

dwudziestościan

Na przykład punkty planu Z to (a, b to długości prostokąta):

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

Teraz nadal musisz znaleźć 20 twarzy. Pozostaje to jako ćwiczenie dla czytelnika: str

Dopracowanie kształtu

Teraz, gdy masz podstawową kulę, możesz chcieć dodać wielokąty. Robisz to za pomocą tego prostego algorytmu:

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

Aby znaleźć punkt środkowy, przypuszczamy, że chcemy utworzyć kulę jednostkową (środek (0, 0, 0), promień 1).

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)

Przy każdej iteracji może być konieczne odtworzenie twarzy, ale jest to dość łatwe. Każda twarz jest podzielona na cztery:

poprawienie twarzy

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.