Graph 最佳数据结构&;表示网格上几何单位的包

Graph 最佳数据结构&;表示网格上几何单位的包,graph,geometry,grid,automata,Graph,Geometry,Grid,Automata,我想用“几何自动机”写一个程序。我想把它作为一本关于艺术设计的书的附属品。将有不同的单元,如下图所示的“四瓣单元”和“六瓣单元”,用户可以选择规则集在单元上绘制独特的图案: 我不知道这个项目最好的数据结构是什么。我也不知道是否做过类似的事情,如果是,使用什么包或语言。我愿意学习任何东西 我现在所知道的是二维数组,用来表示单位网格。我在数学上划分“子单元”也有困难。我可以看到我自己只是重叠了一堆单位圆公式,缩小了x/y域(笛卡尔坐标系)。我还可以看到我自己表示从一个单位到另一个单位的曲线(弧度)

我想用“几何自动机”写一个程序。我想把它作为一本关于艺术设计的书的附属品。将有不同的单元,如下图所示的“四瓣单元”和“六瓣单元”,用户可以选择规则集在单元上绘制独特的图案:

我不知道这个项目最好的数据结构是什么。我也不知道是否做过类似的事情,如果是,使用什么包或语言。我愿意学习任何东西

我现在所知道的是二维数组,用来表示单位网格。我在数学上划分“子单元”也有困难。我可以看到我自己只是重叠了一堆单位圆公式,缩小了x/y域(笛卡尔坐标系)。我还可以看到我自己表示从一个单位到另一个单位的曲线(弧度)

任何帮助都将不胜感激


谢谢

我不能保证这是最有效的解决方案,但这是一个解决方案,因此应该让您开始

图(带边的顶点)似乎是对该网格进行编码的自然方式。每个节点有4或6个邻居(邻居的数量与花瓣的数量匹配)。每个节点有8或12条边,每个相邻节点有两条边

每个顶点都有一个(x,y)坐标,例如左图像中的第一行,从左侧开始位于位置(1,0),其右侧的下一个节点位于位置(3,0)。第二行上的第一个节点是(0,1)。这样可以确保正确绘制坐标,但坐标与此无关

问题在于相邻两条不同的边,每一条都与一个不同的圆对齐。你可以用圆圈的中心来识别它们,或者你可以把一个叫做“上”,另一个叫做“下”


此结构使您可以轻松地跟踪边,并且可以在必要时稀疏地存储在哈希集(由坐标键控)或链表中。

数据结构:

顶点可以自然地存储为二维数组(行、列),其特殊特性是每一列都有一个水平偏移

每个顶点都有一组到其右侧(右上角、右下角或右下角)顶点的可能连接。可能的连接集取决于网格。连接应显示为细线还是粗线可以表示为单个位,因此顶点的所有可能连接都可以压缩到单个字节中(比布尔数组更紧凑)。对于4瓣变体,只需要存储4位;对于6瓣变体,需要存储6位

这意味着您的数据结构应该是一个二维字节数组

套餐:


您喜欢的任何东西都允许绘图和鼠标/触摸交互。绘制连接非常简单;您可以使用SVG绘制圆弧,或者甚至可以使用一组PNG来表示不同的连接位模式(精灵具有部分透明度,以避免遮挡其他连接)。

您的数据结构需要支持哪些操作?