我有一张地图,上面有涂有一种特定颜色的通道,人们只能在这些通道上行走 - 所以任何其他颜色都是障碍。是否有任何工具/库/算法可以从这种地图创建图形?
答案 0 :(得分:1)
没有必要使用库或工具来构建它。手头的任务足够简单,足以证明新实施的合理性。
下面我将概述为完成此任务而构建的组件,特别强调它们的职责范围很小。
图[T]
该图表示节点集合中节点对之间的二元关系。 T
表示与这些节点关联的有效负载 - 在您的用例中,表示图像的像素坐标。我们不会假设图表是定向的还是非循环的或类似的东西。
节点[T]
图表中的单个节点。它具有T
类型的通用有效负载和名为GetNeighboringNodes
的方法。
<强> PassageGraphBuilder 强>
此课程负责从Graph<PixelCoordinates>
中创建Image
。它包含Color
表示给定Image
内的段落的配置,以及哪个方向性(仅上/下/左/右或对角线?)允许连通性。
它通过为Node<PixelCoordinates>
中的每个像素创建Image
来执行此任务。然后,它通过检查Image
中每个相邻像素的颜色来创建这些节点之间的关系。
<强> WorldToGraphMap 强>
此组件负责将世界坐标映射到像素坐标。这允许您的世界规模独立于用于驱动它的数据。它有GetWorldCoordinatesForNodeCenter(Node<PixelCoordinates>)
和GetNodeForWorldCoordinates(WorldCoordinates)
等方法。
然后你可以......
最后,您可以执行以下操作:
GetNodeForWorldCoordinates(WorldCoordinates)
以确定图表中新位置对应的节点当然,构建一个真正的navmesh还有很多其他的复杂功能,但这应该可以帮助你解决这个用例。