Czy ktoś wie, jak stworzyć algorytm zdolny do wykonania figury tak jak na zdjęciu, gdy otrzyma zestaw określonych punktów (macierz 3D)
Czy ktoś wie, jak stworzyć algorytm zdolny do wykonania figury tak jak na zdjęciu, gdy otrzyma zestaw określonych punktów (macierz 3D)
Odpowiedzi:
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.
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:
Na przykład punkty planu Z to (a, b to długości prostokąta):
Teraz nadal musisz znaleźć 20 twarzy. Pozostaje to jako ćwiczenie dla czytelnika: str
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: