C++加速类和函数处理六边形网格。

chexutil的Python项目详细描述


chexutil
==


c++加速处理六边形网格的类和函数。图:img/screenshot.png
:alt:chex的屏幕截图示例.py

简介六角形网格中网格坐标的操作。六角网格坐标与屏幕坐标之间的转换。
3.六角形网格上的视场计算。
4.六边形网格上的路径查找。

所有这些都是由模块"hexutil"提供的。文件"chex example.py<;chex example.py>;"包含使用此功能的示例编码。上图是本例的屏幕截图。

它们需要满足其和是偶数的特性。


以下(x,y)坐标系用于处理
网格中的六边形。

。图:img/hexcoords.png
:alt:hexgrid坐标系


hexgrid坐标系
首先,这个坐标系在表示中留下"洞"
,也就是说,没有对应于
(0,1)的六边形。然而,这在实践中并不是一个真正的问题。
优点是与
六边形的实际中心点的关系变得非常简单,即只需将"y"与√3相乘。这也简化了屏幕坐标计算。


"孔"是唯一一个问题的时候是,如果你想将网格数据密集地打包到2d(numpy)数组或列表列表中。在这种情况下,只需使用"ar[hexagon.x//2][hexagon.y]``索引到数组"ar``"。

"hex``的构造函数检查"x+y是偶数"属性。如果
不满足,则抛出"invalidhex"异常。

请注意,"hex"是namedtuple。这意味着它可以在需要2元组(x,y)的地方使用
。这也意味着它是不可变的。\*分别用于访问x坐标和y坐标的"hex.x"和
"hex.y"字段。\*
支持算术运算"hex1+hex2"、"hex1-hex2"和"hex"。\*方法``hex.neighbors()``返回一个hex的6个直接
邻居。\*方法``hex1.distance(hex2)``返回``hex1``和``hex2``之间在六边形网格上的步距`.


te可以用两个参数"width"和"height"来描述。下图显示了这些与六边形尺寸的关系。图:img/width height.png
:alt:hexgrid宽度和高度


hexgrid宽度和高度
对于一个完全规则的六边形,关系``height=√3 width``
应该成立。实际上,我们通常需要整数像素坐标。

它可以初始化为"hexgrid(width,height)"或
"hexgrid(width)"。在后一种情况下,``height``自动
计算为``round(_√3*width)```.

\*分别用于访问宽度
和高度的
``hexgrid.width``和``hexgrid.height``字段。\*方法"hexgrid.center(hex)"返回"hex"的中心屏幕坐标对(x,y)。\*方法
``hexgrid.corners(hex)``返回屏幕的6对(x,y)坐标"hex"的6个角。\*方法
``hexgrid.bounding`box(hex)``返回一个``chexutil.rectangle``对象
,描述``hex``的边界框。\*方法在坐标(x,y)处返回hexgrid.hex,在屏幕坐标(x,y)处返回hex。\*方法"hex grid.hex es"在"rectangle(rect)"中返回与"rectangle"rect重叠的所有"hex"的序列。d在``hex`
实例上。

``hex.field_视图(self,transparent,max_distance,visible=none)``


-transparent——从十六进制到布尔值,表示十六进制是透明的dict which will be filled and
return

返回一个dict,该dict的键是可见的六边形。
值是一个位掩码,指示六边形的哪些边
可见。如果还想使用此函数来计算光源,位掩码很有用。






light_set=light_source.field_of_view(…)

pos是否可见?
如果view_set.get(pos,0)和light_set.get(pos,0):
是的,它是在六边形网格上的路径查找。
是的,它是在六边形网格上的路径查找(使用"a\*
算法<;https://en.wikipedia.org/wiki/a*"u search_algorithm">;`"don"
e对"hex"实例采用以下方法。

``hex.查找路径(self,destination,passable,cost=lambda pos:1)``

-hex--查找路径的起始位置(``hex``对象).
-destination--查找路径的目标位置。
-passable--一个位置的函数。n,如果我们可以在这个十六进制中移动
,则返回true。
-用于移动十六进制的cost——cost函数。应返回值
≥1。默认情况下,所有开销都是1。

这将返回路径(作为"hex"的序列,包括开始点和目的地),如果找不到路径,则返回"none"。



欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
JAVAexe jar文件读取txt文件,但内容在不同的计算机中都被破坏(显示外来语言..)   java BufferedReader提供缺少的字符   java我希望全局捕获所有可能的安卓异常,以便应用程序无法关闭   java MATLAB JA Builder   java如何将一副牌一分为二?   字典在Java中使用映射条目时出错   Java命令提示符仿真器   java HC06蓝牙模块   如何在java中获得与CallableStatement一起使用的完全限定SQL类型名。registerOutParameter   java如何为文件中的每一行整数创建数组   java从文本框传递参数   java如何将参数传递到工厂以创建对象?   java JSP无法执行脚本标记中包含的javascript函数