У меня есть 3D pointcloud, и я бы хотел эффективно запросить все точки на расстоянии d от произвольной точки p (которая не обязательно является частью сохраненного pointcloud)
Запрос будет выглядеть примерно так:
Pointcloud getAllPoints(Point p, float d);
какая ускорительная структура будет подходящей для этого? Дерево диапазонов, по-видимому, подходит только для запросов прямоугольных томов, а не сферных томов (конечно, я мог бы запросить ограничивающий бокс сферы, а затем отсортировать все вершины, которые имеют большее расстояние, чем d - но, возможно, есть лучший способ сделать это??)
спасибо!
согласно предложению новолактократов, я пытаюсь определить желаемые функции структуры:
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
Обычно, после n запросов, точки смещаются и вводятся несколько (не много!) вставок и исключений. векторы смещения очень малы по сравнению с ограничивающим блоком всех точек