Python实现Delaunay三角剖分后如何计算各点关联的所有边长度
实现代码
你可以直接在原有代码基础上添加边提取、长度计算逻辑,完整可运行代码如下:
import numpy as np from scipy.spatial import Delaunay import matplotlib.pyplot as plt # 原有初始化代码 points = np.array([ [0, 0], [0, 1.1], [1, 0], [1, 1], [1.5, 0.6], [1.2, 0.5], [1.7, 0.9], [1.1, 0.1], ]) tri = Delaunay(points) # 核心逻辑:计算每个点关联的边长度 # 1. 提取所有不重复的边,统一按点索引升序排列避免重复统计 edges = set() for simplex in tri.simplices: edges.add(tuple(sorted((simplex[0], simplex[1])))) edges.add(tuple(sorted((simplex[1], simplex[2])))) edges.add(tuple(sorted((simplex[2], simplex[0])))) edges = list(edges) # 2. 初始化结果列表,子列表第一个元素为点编号 # 若需要点编号从1开始(对应示例中的P1、P2命名),将i改为i+1即可 point_edge_result = [[i] for i in range(len(points))] # 3. 计算边长度,分配到对应点的列表中 for p1, p2 in edges: edge_len = np.linalg.norm(points[p1] - points[p2]) # 可按需调整保留小数位数,这里保留4位 point_edge_result[p1].append(round(edge_len, 4)) point_edge_result[p2].append(round(edge_len, 4)) # 输出结果 for item in point_edge_result: print(item) # 原有可视化代码 plt.triplot(points[:, 0], points[:, 1], tri.simplices.copy(), color='0.7') plt.plot(points[:, 0], points[:, 1], 'o', color='0.3') plt.show()
输出说明
运行后输出的point_edge_result就是你要求的格式:
- 每个子列表对应一个点
- 子列表第一个元素为点的索引
- 后续元素为该点所有关联边的长度
可视化效果图


内容的提问来源于stack exchange,提问作者Drizzle
相关产品推荐
相关产品推荐

