У меня есть набор пользовательских путей (2 тускло) в настройке игры, которые моделируются как набор строк (дуги) и путевых точек = вершины. Весь набор путей можно рассматривать как график, где ребра являются отрезками линии, которые имеют дополнительные свойства, такие как длина, вероятность и т. Д.Найти все linesegments = ребра на определенном расстоянии до точки на графике, как объединить boost-graph с boost-geometry?
Теперь я должен идентифицировать набор (прямых) отрезков линии = ребра в пределах определенного расстояние до текущей позиции пользователя, чтобы найти позицию пользователя на графике.
Как реализовать это как можно проще, не изобретая колесо? Как эффективно реализовать поиск?
Я думал об использовании ускорителя для обработки графика и объединения его с форсированной геометрией. . см TrajGraph, который использует пакетные свойства в буст-графа:
struct Tvertex
{
float x, y; //vertex=waypoint position
};
struct Tarc_segment
{
float len, curvature, prob; //line segment=edge properties
};
typedef adjacency_list<vecS, vecS, directedS, Tvertex, Tarc_segment> TrajGraph;
Теперь для того, чтобы сохранить отрезок в качестве собственности края можно было бы добавить модель :: LineString BOOST геометрии и использовать ближайший сосед запрос бустер-геометрии, чтобы найти сегментов линии. Но afaik boost-geometry не позволяет прикрепить свойства к linestrings, как это делает boost-graph. Следовательно, как получить край (ы) из linestring (s)?
Простым решением грубой силы может быть перемещение всего краевого списка графика и вычисление расстояния до каждого сегмента линии. См. here и here о том, как рассчитать расстояние до сегмента прямой линии.
Это в двух измерениях? –
Да, в 2-х измерениях – spinxz