【发布时间】:2016-11-30 00:50:53
【问题描述】:
我有一张地图,上面有涂有特定颜色的通道,人们只能在这些通道上行走 - 所以任何其他颜色都是障碍。是否有任何工具/库/算法可以从这种地图创建图形?
【问题讨论】:
-
当你创建这样的游戏时,你应该使用model / view / controller pattern。该模型将包含创建地图和创建图表的信息。
标签: java algorithm image-processing
我有一张地图,上面有涂有特定颜色的通道,人们只能在这些通道上行走 - 所以任何其他颜色都是障碍。是否有任何工具/库/算法可以从这种地图创建图形?
【问题讨论】:
标签: java algorithm image-processing
不需要任何库或工具来构建它。手头的任务足够简单和独特,足以证明新实施的合理性。
下面我概述了我将为完成此任务而构建的组件,特别强调它们的狭窄职责。
图表 [T]
该图表示节点集合中节点对之间的二元关系。 T 表示与这些节点关联的有效负载——在您的用例中,是图像的像素坐标。我们不对图是有向图还是无环图或类似的东西做任何假设。
节点 [T]
图中的单个节点。它有一个T 类型的通用有效载荷和一个名为GetNeighboringNodes 的方法。
PassageGraphBuilder
这个类负责从Image 中创建一个Graph<PixelCoordinates>。它包含Color 代表给定Image 中的一个段落的配置,以及哪个方向性(只是上/下/左/右或对角线?)允许连接。
它通过为Image 中的每个像素创建一个Node<PixelCoordinates> 来执行此任务。然后,它通过检查Image 中每个相邻像素的颜色来创建这些节点之间的关系。
WorldToGraphMap
该组件负责将世界坐标映射到像素坐标。这允许您的世界的规模独立于用于驱动它的数据。它有GetWorldCoordinatesForNodeCenter(Node<PixelCoordinates>) 和GetNodeForWorldCoordinates(WorldCoordinates) 等方法。
那么你可以...
最后,您可以执行以下操作:
GetNodeForWorldCoordinates(WorldCoordinates)确定图中新位置对应的节点,当然,构建一个真正的导航网格还有很多复杂的地方,但这应该会让你继续这个用例。
【讨论】: