Alguém sabe como criar um algoritmo capaz de fazer a figura exatamente como na figura, quando recebe um conjunto de pontos específicos (matriz 3D)
Alguém sabe como criar um algoritmo capaz de fazer a figura exatamente como na figura, quando recebe um conjunto de pontos específicos (matriz 3D)
Respostas:
Chegando aqui após a batalha, mas como ainda não há resposta aceita e como o @Luke se recusa a receber o representante que ele merece, aqui está um rápido resumo do link que ele forneceu.
Portanto, o algoritmo completo está disponível aqui:
http://blog.andreaskahler.com/2009/06/creating-icosphere-mesh-in-code.html
A idéia é inicializar sua malha com um método simples que fornece uma esfera com 20 faces e refiná-la até que você esteja satisfeito.
Você começa com um icosaedro . Como o artigo da Wikipedia diz, você pode obter os vértices desenhando três retângulos idênticos e ortogonais. Você tem 3 retângulos com 4 cantos cada -> 12 vértices.
Ilustração da Wikipedia:
Por exemplo, os pontos do plano Z são (a, b são os comprimentos do retângulo):
Agora você ainda precisa encontrar as 20 faces. Isso é deixado como um exercício para o leitor: p
Agora que você possui uma esfera básica, convém adicionar polígonos. Você faz isso com este algoritmo simples:
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
Para encontrar o ponto do meio, supomos que desejamos criar a esfera unitária (centro (0, 0, 0), raio 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)
Em cada iteração, podemos ter que reconstruir as faces, mas é bastante fácil. Cada face é dividida em quatro: