Alguém conhece um algoritmo que permita uma figura como esta imagem?

9

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)

insira a descrição da imagem aqui

user88794
fonte
4
É uma coisa, é isso que você está procurando: blog.andreaskahler.com/2009/06/…
Luke San Antonio Bialecki
3
@LukeSanAntonio Post que como uma resposta para que eu possa upvote-lo agradar;) (mas não apenas o link, seria necessário alguma explicação mínima do algoritmo para uma resposta)
yannis
11
@YannisRizos Eu gostaria, mas não tenho nenhum conhecimento ou experiência nesse tipo de coisa, então não pude dar uma explicação adequada (bem, eu poderia, mas outros poderiam fazer muito melhor) A única razão pela qual eu sabia que o link era porque eu sabia o nome da forma de Blender ( wiki.blender.org/index.php/Doc:2.4/Manual/Modeling/Meshes/... )
Luke San Antonio Białecki
criando a sombra de um objeto 3D é feita diariamente, veja mapeamento sombra e volume de sombra , mas há mais algoritmos de criação de sombra disponíveis
aberração catraca
Não é a Sombra que estou procurando criar, é o objeto físico. Vamos imprimir em 3D.
user88794

Respostas:

5

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.

Inicializando a forma

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:

icosaedro

Por exemplo, os pontos do plano Z são (a, b são os comprimentos do retângulo):

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

Agora você ainda precisa encontrar as 20 faces. Isso é deixado como um exercício para o leitor: p

Refinando a forma

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:

rosto refinar

Simon Bergot
fonte