处理六边形网格的类和函数
hexutil的Python项目详细描述
hexutil
==
处理六角形网格的类和函数。
[示例截图.py]
Introduction
----
此模块提供以下功能。
1。六角形网格中网格坐标的操作。六角形网格坐标与屏幕坐标之间的转换。六角形网格上的视场计算。
4.在六角形网格上寻找路径。
所有这些都是由hexutil模块提供的。文件example.py包含使用此功能的示例编码。上图是本例中的屏幕截图
。
类
hex有两个整型参数x和y。它们需要满足
属性,即它们的和是偶数的。
下面的(x,y)坐标系用于处理
网格中的六边形。
[hex grid坐标系]
系统在表示中留下"孔",即没有对应于(0,1)的六边形。然而,这在实践中并不是一个真正的问题。
优点是与
六边形的实际中心点的关系变得非常简单,即只需将y乘以√3。这也简化了屏幕坐标计算。
"孔"是唯一一个问题的时候是,如果你想将网格数据密集地打包到2d(numpy)数组或列表列表中。在这种情况下,只需使用ar[hexagon.x//2][hexagon.y]索引到数组ar中即可。hex的构造函数检查"x+y是偶数"属性。如果不满足,则抛出invalidhex异常。
这意味着它可以在需要
2元组(x,y)的地方使用。这也意味着它是不可变的。
hex实例上的重要功能。*分别用于访问x坐标和y坐标的hex.x和hex.y
字段。*算术
支持hex1+hex2、hex1-hex2和-hex运算。*
方法hex.neighbors()返回十六进制的6个直接邻接。*
方法hex1.distance(hex2)返回hex1和hex2之间的
六边形网格上的步数距离。
六边形网格坐标和屏幕坐标之间的转换。
屏幕的六边形(像素)坐标可以用宽度和高度两个参数来描述。下图显示了这些
与六边形尺寸的关系。
[六边形网格的宽度和高度]
对于完全规则的六边形,关系高度=_√3 width
。实际上,我们通常需要整数像素坐标。
hexgrid类捕获这样一对宽度和高度值。它可以初始化为hexgrid(宽度、高度)或hexgrid(宽度)。在
后一种情况下,高度自动计算为圆形(_√3*宽度)。
十六进制实例的重要功能。*hexgrid.width和
hexgrid.height字段分别用于访问宽度和高度。
*方法hexgrid.center(hex)返回一对屏幕坐标
hex的中心。*方法hexGrid.corners(hex)返回hex的6个角的屏幕坐标的6对(x,y)的序列
。*
方法hexgrid.bounding_box(hex)返回一个hexutil.rectangle对象
描述hex的边界框。*方法
hexgrid.hex_at_坐标(x,y)返回屏幕坐标
(x,y)处的hex。*方法hexGrid.hex es_In_Rectangle(rect)返回与矩形rect重叠的所有十六进制的序列。
----
视场计算通过以下方法对十六进制实例进行。
您可以查看
-visible——如果提供,应该是一个将被填充的dict,并且
返回
返回一个dict,该dict的键是可见的六边形。
值是一个位掩码,指示六边形的哪些边
可见。如果您还想使用此函数来计算光源,则位掩码很有用。
view_set=player_pos.field_of_view(…)
light_set=light_source.field_of_view(…)
pos是否可见?
如果view_set.get(pos,0)和light_set.get(pos,0):
是的,它是在六边形网格上的
----------
path查找(使用a*算法)是通过以下方法在
hex实例上完成的。
hex.find_path(self,destination,passable,cost=lambda pos:1)
-hex——路径查找的起始位置(hex对象)。
-destination——路径查找的目标位置。
-passable——一个位置的函数,如果我们可以通过这个hex移动
,则返回true。
-cost——cos通过十六进制的T函数。应返回a
值≥1。默认情况下,所有成本为1。
这将返回路径(作为十六进制序列,包括起点
和目的地),如果找不到路径,则返回无路径。
==
处理六角形网格的类和函数。
[示例截图.py]
Introduction
----
此模块提供以下功能。
1。六角形网格中网格坐标的操作。六角形网格坐标与屏幕坐标之间的转换。六角形网格上的视场计算。
4.在六角形网格上寻找路径。
所有这些都是由hexutil模块提供的。文件example.py包含使用此功能的示例编码。上图是本例中的屏幕截图
。
类
hex有两个整型参数x和y。它们需要满足
属性,即它们的和是偶数的。
下面的(x,y)坐标系用于处理
网格中的六边形。
[hex grid坐标系]
系统在表示中留下"孔",即没有对应于(0,1)的六边形。然而,这在实践中并不是一个真正的问题。
优点是与
六边形的实际中心点的关系变得非常简单,即只需将y乘以√3。这也简化了屏幕坐标计算。
"孔"是唯一一个问题的时候是,如果你想将网格数据密集地打包到2d(numpy)数组或列表列表中。在这种情况下,只需使用ar[hexagon.x//2][hexagon.y]索引到数组ar中即可。hex的构造函数检查"x+y是偶数"属性。如果不满足,则抛出invalidhex异常。
这意味着它可以在需要
2元组(x,y)的地方使用。这也意味着它是不可变的。
hex实例上的重要功能。*分别用于访问x坐标和y坐标的hex.x和hex.y
字段。*算术
支持hex1+hex2、hex1-hex2和-hex运算。*
方法hex.neighbors()返回十六进制的6个直接邻接。*
方法hex1.distance(hex2)返回hex1和hex2之间的
六边形网格上的步数距离。
六边形网格坐标和屏幕坐标之间的转换。
屏幕的六边形(像素)坐标可以用宽度和高度两个参数来描述。下图显示了这些
与六边形尺寸的关系。
[六边形网格的宽度和高度]
对于完全规则的六边形,关系高度=_√3 width
。实际上,我们通常需要整数像素坐标。
hexgrid类捕获这样一对宽度和高度值。它可以初始化为hexgrid(宽度、高度)或hexgrid(宽度)。在
后一种情况下,高度自动计算为圆形(_√3*宽度)。
十六进制实例的重要功能。*hexgrid.width和
hexgrid.height字段分别用于访问宽度和高度。
*方法hexgrid.center(hex)返回一对屏幕坐标
hex的中心。*方法hexGrid.corners(hex)返回hex的6个角的屏幕坐标的6对(x,y)的序列
。*
方法hexgrid.bounding_box(hex)返回一个hexutil.rectangle对象
描述hex的边界框。*方法
hexgrid.hex_at_坐标(x,y)返回屏幕坐标
(x,y)处的hex。*方法hexGrid.hex es_In_Rectangle(rect)返回与矩形rect重叠的所有十六进制的序列。
----
视场计算通过以下方法对十六进制实例进行。
您可以查看
-visible——如果提供,应该是一个将被填充的dict,并且
返回
返回一个dict,该dict的键是可见的六边形。
值是一个位掩码,指示六边形的哪些边
可见。如果您还想使用此函数来计算光源,则位掩码很有用。
view_set=player_pos.field_of_view(…)
light_set=light_source.field_of_view(…)
pos是否可见?
如果view_set.get(pos,0)和light_set.get(pos,0):
是的,它是在六边形网格上的
----------
path查找(使用a*算法)是通过以下方法在
hex实例上完成的。
hex.find_path(self,destination,passable,cost=lambda pos:1)
-hex——路径查找的起始位置(hex对象)。
-destination——路径查找的目标位置。
-passable——一个位置的函数,如果我们可以通过这个hex移动
,则返回true。
-cost——cos通过十六进制的T函数。应返回a
值≥1。默认情况下,所有成本为1。
这将返回路径(作为十六进制序列,包括起点
和目的地),如果找不到路径,则返回无路径。