Tengo una nube de puntos 3D y me gustaría consultar eficientemente todos los puntos dentro de la distancia d desde un punto arbitrario p (que no es necesariamente parte de la nube de puntos almacenado)cuya estructura de datos es adecuada para consultar "todos los puntos dentro de la distancia d desde el punto p"
la consulta sería algo como
Pointcloud getAllPoints(Point p, float d);
lo accelerationstructure sería apropiado para esto? Un árbol de rango parece ser apropiado solo para consultar volúmenes rectangulares, no volúmenes esféricos (por supuesto, podría consultar el cuadro delimitador de la esfera y luego ordenar todos los vértices que tengan una distancia mayor que d, pero tal vez haya una mejor manera de hacerlo esto ??)
gracias!
acuerdo con Novelocrats sugerencia, trato de definir las funciones deseadas de la estructura:
SearchStructure Create(Set<Point> cloud)
Set<Point> Query(SearchStructure S, Point p, float maxDistance)
SearchStructure Remove(Point p)
SearchStructure Insert(Point p)
SearchStructure Displace(Set<Point> displacement) //where each value describes an offsetVector to the currently present points
Por lo general, después de n consultas, los puntos quedan desplazados y unos pocos (no muchos!) Se hacen inserciones y deleciones . los vectores de desplazamiento son muy pequeños en comparación con el cuadro delimitador de todos los puntos
Creo que la creación de tiempo lineal podría estar pidiendo demasiado, y podría desalentar a las personas a proporcionar buenas respuestas a la pregunta principal. ¿Constantemente estás consultando nuevas nubes puntuales también? Si los nuevos puntos son el resultado de cambios en el existente, la modificación de la estructura puede ser más económica. – Novelocrat
"Query" tiene solo una 'r'. Sugiero arreglar eso para la posteridad. – Novelocrat
Novelocrat: tienes razón: los nuevos puntos son modificaciones de los antiguos, pero bastante difíciles (todos los puntos se mueven, cada uno en otra dirección, también se pueden agregar nuevos puntos que no estaban presentes antes) así que recreé el mapa cada vez será el mejor. habrá aproximadamente n tales consultas para un mapa que contenga n puntos, antes de que la nube de puntos se mueva –