Questão
Como você classificaria uma nuvem de pontos em relação a uma malha não estruturada de células hexaédricas?
Cada célula possui um centro e um rótulo exclusivo para representá-lo. Existem basicamente dois pontos de nuvem (nuvem de pontos original e uma nuvem de pontos dos centros celulares), mas as informações da geometria da célula (caixa delimitadora) podem ser úteis, não tenho certeza.
Resultados
Eu fiz algumas perguntas e pesquisando na literatura:
se a malha é hexaédrica e não estruturada, o problema é reduzido a uma pesquisa de faixa ortogonal. Para esse fim, as árvores kd são usadas com mais frequência. Se a malha é refinada com base em uma estrutura de dados octree, o algoritmo de pesquisa por intervalo pode ser construído em torno dela. O objetivo é evitar lidar com a geometria direta da malha e se concentrar no relacionamento A da nuvem de pontos A da nuvem de pontos B. Nuvem de pontos A: pontos de consulta, nuvem de pontos B: centros de células de malha.
Respostas:
Nota importante: Esta resposta não responde à pergunta real, mas foi deixada de ser anulada por solicitação. Embaraçosamente, confundi hexaédrico e hexagonal. A pergunta é sobre a classificação de pontos em células hexaédricas arbitrárias em 3D, enquanto essa solução classifica pontos em células hexagonais regulares em 2D, ou irregulares que correspondem a algum mosaico de Voronoi em qualquer dimensão. Este método é aplicável apenas se a malha foi gerada como um mosaico de Voronoi em primeiro lugar (o que parece ser uma abordagem usada ocasionalmente ).
Não sei ao certo o que você quer dizer com classificação aqui, mas presumo que você queira classificar o ponto em caixas hexagonais no avião.
O Mathematica é o que eu sei, então vou mostrar como fazer no Mathematica, mas o método pode ser portado para outros sistemas. A idéia é que uma rede hexagonal seja o dual de uma triangular: ela pode ser gerada como o diagrama de Voronoi de um ponto em arranjo triangular. Um ponto da nuvem pertence a um dado hexágono se estiver mais próximo do centro desse hexágono do que do centro de qualquer outro hexágono.
Este método também funcionará para malhas de diferentes formas, desde que possam ser geradas como o diagrama de Voronoi de algum arranjo de pontos. (Por exemplo, os hexágonos não precisam ser regulares.)
Vamos gerar a malha. Esta é uma estrutura triangular:
Seu dual é o hexagonal em que estamos interessados:
Isso cria uma função
nf
que encontra o índice do centro do hexágono ao qual algum ponto da nuvem está mais próximo. É a chave do método:Agora vamos gerar uma nuvem de 1000 pontos aleatórios e classificá-los com
nf
:indices
contém os índices dos centros aos quais cada ponto da nuvem está mais próximo. Esta é a informação que precisávamos. Agora podemos fazer um histograma com eles ...... ou colorir cada um deles ...
... ou qualquer tipo de visualização sofisticada que desejamos.
O ponto principal aqui foi a função que encontra o ponto mais próximo de algo (
Nearest
). O Mathematica possui isso, mas há uma chance de seu sistema não. Se for esse o caso, consulte esta pergunta sobre como implementar eficientemente essa função (ou apenas siga a ingênua implementação de tempo linear se você não tiver uma quantidade enorme de pontos a serem processados).fonte