我在游戏设置中有一组用户路径(2 暗淡),它们被建模为一组线(弧)和航点 = 顶点。整个路径集可以看作是一个图,其中的边是线段,具有长度、概率等附加属性。
现在我必须识别到用户当前位置一定距离内的一组(直线)线段 = 边,以便在图中找到用户的位置。
如何在不重新发明轮子的情况下尽可能简单地实现这一点?如何高效地实现搜索?
我想到了使用 boost-graph 来处理图形并将其与 boost-geometry 结合起来。例如,请参阅 TrajGraph,它在 boost-graph 中使用捆绑属性:
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;
现在为了将线段存储为边缘属性,可以添加 boost geometry 的 model::linestring 并使用 boost-geometry 的最近邻查询来查找线段。但是 afaik boost-geometry 不允许像 boost-graph 那样将属性附加到线串。因此如何从线串中获取边缘?
一个简单的蛮力解决方案可能是遍历图形的整个边缘列表并计算到每个线段的距离。有关如何计算到直线段的距离的信息,请参见此处和此处。