在 Python 中生成、填充和绘制六角形晶格

2024-04-22

我想修改我的在方晶格(它是基于代理的生物学模型)上运行的Python脚本,以在六边形宇宙中工作。

这就是我在方形模型中创建和初始化二维矩阵的方法:基本上,N 是晶格的大小,R 给出了我需要在算法开始时更改值的矩阵部分的半径:

a = np.zeros(shape=(N,N))
center = N/2

for i in xrange(N):
    for j in xrange(N):
        if( ( pow((i-center),2) + pow((j-center),2) ) < pow(R,2) ):
            a[i,j] = 1

然后,我让矩阵根据某些规则演变,最后通过创建 pickle 文件进行打印:

name = "{0}-{1}-{2}-{3}-{4}.pickle".format(R, A1, A2, B1, B2)
pickle.dump(a, open(name,"w"))

现在,我想做完全相同的事情,但在六角形格子上。我读this https://stackoverflow.com/questions/2049196/generating-triangular-hexagonal-coordinates-xyz有趣的 StackOverflow 问题,它阐明了如何用三个坐标表示六角形晶格上的位置,但据我所知,有几件事仍然模糊,即

(a)考虑到由于坐标的限制,我想要的并不等于3D矩阵,我应该如何处理Python中的三个轴,以及

(b) 如何绘制它?

至于(a),这就是我试图做的:

a = np.zeros(shape=(N,N,N))

for i in xrange(N/2-R, N/2+R+1):
    for j in xrange(N/2-R, N/2+R+1):
        for k in xrange(N/2-R, N/2+R+1):
            if((abs(i)+abs(j)+abs(k))/2 <= 3*N/4+R/2):
                a[i,j,k] = 1

在我看来,初始化一个 NxNxN 矩阵,然后找到一种方法根据坐标上的约束来打印它的子集是相当复杂的。我正在寻找一种更简单的方法,更重要的是,为了理解如何绘制算法产生的六边形格子(对此没有任何线索,我暂时没有尝试任何东西)。


我同意尝试将六方晶格硬塞进立方晶格是有问题的。我的建议是使用一个通用方案 - 将相邻站点表示为graph。这与 python 字典对象配合得很好,并且在您提供的链接之一中实现“轴向坐标方案”很简单。下面是一个使用 networkx 创建和绘制“网格”的示例。

import networkx as nx
G = nx.Graph(directed=False)
G.add_node((0,0))

for n in xrange(4):
    for (q,r) in G.nodes(): 
        G.add_edge((q,r),(q,r-1))
        G.add_edge((q,r),(q-1,r))
        G.add_edge((q,r),(q-1,r+1))
        G.add_edge((q,r),(q,r+1))
        G.add_edge((q,r),(q+1,r-1))
        G.add_edge((q,r),(q+1,r))

pos = nx.graphviz_layout(G,prog="neato")
nx.draw(G,pos,alpha=.75)

import pylab as plt
plt.axis('equal')
plt.show()

这不是最佳实现,但它可以生成任意大的格子:

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Python 中生成、填充和绘制六角形晶格 的相关文章

随机推荐

  • 我可以从类似于 jaxb 的 json 数据创建类吗

    因此 我的代码是 api 的客户端 数据以 xml 形式返回 我已经能够从该 xml 的一些示例创建有效的 xsd 文件 然后从模式生成一些 JAXB 类 以便我的代码现在可以加载并使用xml 数据 而无需直接使用 Xml 但不幸的是 在最
  • SignalR .NET Core 驼峰命名法 JSON 合约解析器

    使用 NET Core RC2 让 SignalR 工作 但试图让它返回 JSON 中的驼峰命名法属性 对于我正在使用的 API services AddMvc AddJsonOptions o gt o SerializerSetting
  • 如何获取 gmail api 的消费者密钥和消费者秘密?

    我正在尝试使用 Gmail php xoath php 示例 但是它需要输入消费者密钥和消费者秘密 我在 Gmail api 文档中找不到如何获取这些密钥和秘密 有谁知道如何获取它们或知道任何相关文档吗 Use anonymous anon
  • Bootstrap Carousel:删除自动滑动

    我正在使用 Bootstrap 轮播 我想要的是滑块仅在单击导航或分页时才会滑动 我尝试过删除 carousel carousel interval 6000 它工作正常 但我的问题是一旦我点击了导航或分页 它现在就会自动滑动 是否可以取消
  • 对“__divdi3”的未定义引用

    在链接一些对整数类型执行除法和模运算的代码时long long我收到以下两个错误 util c text 0x1af undefined reference to divdi3 util c text 0x1ef undefined ref
  • javascript在两个不同的索引处分割字符串

    我有一张 amex I E 信用卡 371449635398431我想分成三部分3714 496353 98431 是否有一种简单的方法可以通过预定义索引 在本例中为 4 和 10 分割字符串 可能使用简单的正则表达式函数 我真的不认为这里
  • 按天分组的 SQL 查询

    我想列出所有销售额 并按天对总和进行分组 Sales saleID INT amount INT created DATETIME 注意 我使用的是 SQL Server 2005 如果您使用的是 SQL Server dateadd DA
  • 预发送脚本如何检索参数化 Jenkins 作业的参数?

    我想根据参数化作业的布尔参数值取消电子邮件发送 该参数名为 skip email 我尝试编写包含以下内容的预发送脚本 但它不起作用 def env System getenv logger println Should I skip ema
  • 将 mvc-mini-profiler 与 EF 4.0 和 Ninject 结合使用

    我正在尝试将新的 mvc mini profiler 与基于 EF4 的应用程序一起使用 但我不知道如何正确连接到目标数据源 据我所知 Func
  • 如何在 Visual C++ 2008 中链接静态库?

    我的 VC 解决方案包括两个项目 一个应用程序 exe 和一个静态库 两者都编译良好 但无法链接 我使用的静态库中的每个函数都收到 无法解析的外部符号 错误 它们看起来像这样 MyApplication obj 错误 LNK2019 无法解
  • FileStream 添加“额外”字符到 TXT 文件

    无论我读取 TXT 文件还是 XML 文件 我总是会看到 额外 信息添加到保存到磁盘的文件中 我们首先执行以下操作 FileStream fs new FileStream fileMoverFile SourcePath FileMode
  • 为什么 C# 编译器对 double IEnumerable 和 foreach T 感到满意?

    我知道这段代码不起作用 并且以有效的方式编写它没有问题 我想知道编译器如何构建而不出现任何错误 如果您在哪里运行它 您会遇到运行时错误吗 假设数据不为空 using System using System Collections Gener
  • 是否有可能将一个 HMap '转换' 为另一个 HMap

    如果我有一个无形的 https github com milessabin shapeless HMap MappingA 为类型正确定义隐式MappingA K V 我可以安全地将其转换 映射到HMap MappingB class Ma
  • MediaRecorder.AudioSource.VOICE_CALL 不适用于 Android 4.1.2 中的通话录音

    https github com esnyder callrecorder https github com esnyder callrecorder我已应用此源代码来执行通话录音 但它不是录音通话 双向录音 经过大量搜索后 我发现 And
  • 在 C# 中通过 TCP 发送 C 结构体

    我正在编写一个程序 通过 TCP 与一台设备的管理界面进行交互 问题是 设备的文档是用C写的 而我写的程序是用C 写的 我的问题是 文档指定 通信基于基于C结构的API缓冲区 再多的谷歌搜索似乎也无法让我找到这个 API 或如何通过 TCP
  • 重写纯虚函数时使用“override”有什么意义吗?

    例如 class Base virtual void my function 0 class Derived Base void my function override 从我读到的来看 override关键字用于确保我们在重写的函数中具有
  • jQuery Mobile 将下一个输入集中在按键上

    我有一个 jquery 移动网站 其 html 表单由 4 个引脚输入框组成 我希望用户能够在每个输入字段中输入 pin 而不必按 iphone 键盘的 下一步 按钮 我尝试了以下操作 虽然它似乎将焦点设置到第二个输入并插入值 但键盘消失了
  • 在 C# 中重新抛出异常的正确方法是什么? [复制]

    这个问题在这里已经有答案了 这样做是否更好 try catch Exception ex throw Or this try catch Exception ex throw ex 他们做同样的事情吗 这个比那个好吗 您应该始终使用以下语法
  • 如何使用 PHP 发送带有内嵌附加图像的 HTML 电子邮件

    我有一个 PHP 脚本 它发送一封带有附加图像的 HTML 电子邮件 它工作得很好 但是 我无法让附件显示在 img 电子邮件正文中的标签 附件文件名为postcard png服务器上的原始文件名是4e60348f83f2f png 我尝试
  • 在 Python 中生成、填充和绘制六角形晶格

    我想修改我的在方晶格 它是基于代理的生物学模型 上运行的Python脚本 以在六边形宇宙中工作 这就是我在方形模型中创建和初始化二维矩阵的方法 基本上 N 是晶格的大小 R 给出了我需要在算法开始时更改值的矩阵部分的半径 a np zero