Eu tenho um conjunto de pontos 3D (que eu recupero de uma biblioteca que executa o mosaico de um corpo sólido) que pertencem a uma curva (isto é, uma borda do sólido). Isso significa que a curva certamente passa por cada um desses pontos.
No entanto, o conjunto de pontos não é ordenado, portanto, preciso classificá-los para poder desenhar essa curva corretamente.
Existe alguma abordagem conhecida para esse tipo de problema?
Algumas informações adicionais:
- As curvas são paramétricas em geral (splines / bezier, fatias circulares ..).
- Os pontos são dados como coordenadas de ponto flutuante.
- Os pontos são muito densos (mas podem ser tão densos quanto eu quero). Para se ter uma idéia, para uma curva que ocupa 19 unidades em x, 10 unidades em x e 5 unidades em z, cito uma sequência de pontos em um segmento de curva: (20.7622, 25.8676, 0) (20.6573, 25.856, 0) (20.5529, 25.8444, 0) (20.4489, 25.8329, 0) (20.3454, 25.8213, 0)
Respostas:
Você tem uma instância de um problema chamado reconstrução de curvas a partir de pontos desorganizados . Agora que você sabe o que procurar, encontrará vários métodos, como a crosta, NN-crust, etc. Aqui estão alguns links:
O applet de reconstrução da curva da crosta
Reconstrução de curvas por Tamal Dey
Reconstrução de Curvas e Superfícies: Algoritmos com Análise Matemática , livro de Tamal K. Dey, Cambridge University Press, 2006
Como você está lidando com curvas e as amostras são densas, sugiro que você calcule uma árvore de abrangência mínima euclidiana.
fonte
Após alguns esclarecimentos, provavelmente existe uma abordagem muito melhor que nem exige o conhecimento da forma paramétrica da curva e também evita a etapa de minimização numérica potencialmente problemática.
Se a curva não se cruzar e os pontos estiverem suficientemente densos na curva (e com isso quero dizer, eles devem estar mais próximos do que quaisquer dois pontos na curva que não pertençam ao mesmo segmento, por exemplo, pelo empacotamento da curva) em si mesmo), é possível determinar facilmente o ponto anterior e o próximo de cada amostra:
fonte
fonte