У меня есть трехмерное облако точек, и я хотел бы эффективно запросить все точки на расстоянии d от произвольной точки p (которая не обязательно является частью сохраненного облака точек)
Запрос будет выглядеть примерно так:
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 запросов точки смещаются, и делается несколько (не так много!) Вставок и удалений. векторы смещения очень малы по сравнению с ограничительной рамкой всех точек