如何在Python中创建中心含指定边长正八边形的二维网格
实现方法
直接利用中心在原点的轴对齐正八边形的几何边界做掩码判断即可,不需要额外依赖绘图库生成形状。
判断逻辑
你生成的网格中心在(0,0)坐标点,对于边长为a、边沿水平/垂直/45度方向对齐的正八边形,所有落在内部的点需要同时满足3个边界条件:
- x方向不超出左右垂直边范围:
|X| ≤ a*(1+√2)/2 - y方向不超出上下水平边范围:
|Y| ≤ a*(1+√2)/2 - 不超出四个斜向边范围:
|X| + |Y| ≤ a*(2+√2)/2
三个条件同时成立的点属于正八边形区域,赋值1,其余点赋值0即可。
可直接运行的代码
import numpy as np # 原有网格初始化代码 x = np.linspace(-5, 5, 1000) y = np.linspace(-5, 5, 1000) X, Y = np.meshgrid(x, y) # 自定义正八边形边长,注意a最大不超过约4.14,否则形状会超出[-5,5]的网格边界 a = 2 # 计算边界阈值 s = a * (1 + np.sqrt(2)) / 2 d = a * (2 + np.sqrt(2)) / 2 # 生成0-1掩码 mask = ((np.abs(X) <= s) & (np.abs(Y) <= s) & (np.abs(X) + np.abs(Y) <= d)).astype(int)
补充说明
- 最终得到的
mask数组就是你需要的二维网格,正八边形填充区域值为1,其余区域值为0 - 如果需要旋转正八边形的角度,只需要先对X、Y坐标做对应角度的旋转变换,再代入上述三个约束条件判断即可
- 如果需要调整正八边形的位置,只需要在计算绝对值前给X、Y加上对应方向的偏移量即可
内容的提问来源于stack exchange,提问作者Mustafa
相关产品推荐
相关产品推荐

