You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python中实现可调整边长的六边形网格坐标自动更新?

六边形网格局部边长调整的实现方案

核心思路:解析方法+拓扑联动

不需要对所有六边形做全局坐标变换,利用六边形网格的拓扑关联(共享边/顶点),通过解析计算局部调整后的坐标,再联动更新相邻网格即可。

具体步骤

  • 构建拓扑关系:给每个六边形标记ID,记录每个六边形的相邻六边形ID,以及它们共享的边/顶点索引,这是联动更新的基础。
  • 局部边长调整的解析计算:
    1. 确定修改边对应的两个顶点坐标,结合六边形内角固定120°的约束,根据新边长计算顶点的新坐标。
    2. 更新共享这条边的两个六边形的顶点集合。
  • 联动更新相邻网格:从修改后的六边形出发,遍历所有相邻六边形,根据共享的顶点/边重新计算它们的完整顶点坐标,保证网格连续性。

基于现有代码的修改示例

以下是对你现有代码的调整,支持局部修改边长并联动更新相邻六边形:

import matplotlib.pyplot as plt
import numpy as np

# 边连接关系(顶点索引)
connect = np.array([[1, 2], [2, 3], [3, 4], [4, 5], [5, 6], [6, 1], 
                    [0, 1], [0, 2], [0, 3], [0, 4], [0, 5], [0, 6]])

# 六边形数据:[中心x, 中心y, 尺寸]
hex_data = np.array([[0, 0, 1], [1.5, 1, 1], [3, -1, 1], [4.5, 1, 1], 
                     [6, -1, 1], [7.5, 1, 1], [1.5, -2, 1], [1.5, 3, 1], [1.5, -4, 1]])

# 拓扑关联:键为六边形ID,值为(相邻ID, 共享边索引)的列表(示例手动指定,实际可自动生成)
adjacent = {
    0: [(1, 3), (6, 5)],
    1: [(0, 3), (2, 5), (7, 1)],
}

def connectpoints(xv, yv):
    for pt1, pt2 in connect:
        plt.plot([xv[pt1], xv[pt2]], [yv[pt1], yv[pt2]], 'k-')

def generate_hex(center_x, center_y, size):
    # 生成单个六边形的顶点坐标
    x_base = np.array([0, -1., -0.5, 0.5, 1, 0.5, -0.5]) * size
    y_base = np.array([0, 0, 1, 1, 0, -1, -1]) * size
    return x_base + center_x, y_base + center_y

def update_adjacent_hex(hex_id, new_size):
    # 更新当前六边形尺寸
    hex_data[hex_id][2] = new_size
    # 联动更新相邻六边形(示例逻辑,实际需根据顶点约束精确计算)
    for neighbor_id, _ in adjacent[hex_id]:
        neighbor_size = hex_data[neighbor_id][2] * (new_size / hex_data[hex_id][2])
        hex_data[neighbor_id][2] = neighbor_size

def main():
    # 示例:修改ID0的边长为1.5,并联动更新相邻六边形
    update_adjacent_hex(0, 1.5)
    
    # 绘制所有六边形
    for center_x, center_y, size in hex_data:
        x, y = generate_hex(center_x, center_y, size)
        plt.plot(x[0], y[0], 'ro', markersize=13)
        connectpoints(x, y)
    
    plt.axis('equal')
    plt.show()

if __name__ == "__main__":
    main()

关键说明

  • 拓扑关联自动生成:实际项目中无需手动指定adjacent字典,可通过计算六边形中心坐标的距离,自动识别相邻六边形和共享边。
  • 严格坐标约束:若要保证网格完全连续,不能仅调整尺寸,需根据修改后的顶点坐标重新计算相邻六边形的中心位置,确保共享边完全重合。
  • GeoPandas适配:如果使用GeoPandas,可将每个六边形的Polygon对象存储在GeoDataFrame中,添加adjacent_ids列记录关联,修改时直接更新geometry字段,再联动更新相邻行的geometry。

内容的提问来源于stack exchange,提问作者George Johnson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 14:10:47