Pregunta
¿Cómo ordenaría una nube de puntos con respecto a una malla no estructurada de células hexaédricas?
Cada celda tiene un centro y una etiqueta única para representarlo. Básicamente, hay dos puntos de nube (nube de puntos original y una nube de puntos de los centros celulares), pero la información de geometría celular (cuadro delimitador) puede ser útil, no estoy seguro.
Resultados
He hecho algunas preguntas y busqué en la literatura:
Si la malla es hexaédrica y no estructurada, el problema se reduce a una búsqueda de rango ortogonal. Para este propósito, los árboles kd se usan con mayor frecuencia. Si la malla se refina en base a una estructura de datos de octree, el algoritmo de búsqueda de rango se puede construir a su alrededor. El objetivo es evitar tratar con la geometría de malla directa y concentrarse en la nube de puntos A - relación de la nube de puntos B. Nube de puntos A: puntos de consulta, nube de puntos B: centros de celdas de malla.
fuente
Respuestas:
Nota importante: esta respuesta no responde la pregunta real, pero se dejó sin recuperar por solicitud. Vergonzosamente confundí hexaédrica y hexagonal. La pregunta es sobre la clasificación de puntos en celdas hexaédricas arbitrarias en 3D, mientras que esta solución clasifica los puntos en celdas hexagonales regulares en 2D o irregulares que corresponden a alguna teselación de Voronoi en cualquier dimensión. Este método es aplicable solo si la malla se generó como una teselación de Voronoi en primer lugar (lo que parece ser un enfoque utilizado ocasionalmente ).
No estoy seguro de qué quieres decir con ordenar aquí, pero supongo que quieres ordenar el punto en contenedores hexagonales en el avión.
Mathematica es lo que sé, por lo que le mostraré cómo hacerlo en Mathematica, pero el método se puede transferir a otros sistemas. La idea es que una red hexagonal es la dual de una triangular: se puede generar como el diagrama de Voronoi de puntos en disposición triangular. Un punto de la nube pertenece a un hexágono dado si está más cerca del centro de ese hexágono que del centro de cualquier otro hexágono.
Este método también funcionará para mallas de diferentes formas, siempre que se puedan generar como el diagrama de Voronoi de algún arreglo de puntos. (Por ejemplo, los hexágonos no necesitan ser regulares).
Generemos la malla. Esta es una red triangular:
Su dual es el hexagonal que nos interesa:
Esto crea una función
nf
que encuentra el índice del centro del hexágono al que algún punto de la nube está más cercano. Es la clave del método:Ahora generemos una nube de 1000 puntos aleatorios y ordénelos con
nf
:indices
contiene los índices de los centros a los que cada punto de nube está más cercano. Esta es la información que necesitábamos. Ahora podemos hacer un histograma con ellos ...... o colorear cada uno de ellos ...
... o hacer cualquier tipo de visualización elegante que queramos.
El punto clave aquí fue la función que encuentra el punto más cercano a algo (
Nearest
). Mathematica tiene esto incorporado, pero existe la posibilidad de que su sistema no. Si este es el caso, vea esta pregunta sobre cómo implementar eficientemente dicha función (o simplemente siga con la ingenua implementación de tiempo lineal si no tiene una gran cantidad de puntos para procesar).fuente