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

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就是你要求的格式:

  • 每个子列表对应一个点
  • 子列表第一个元素为点的索引
  • 后续元素为该点所有关联边的长度

可视化效果图

Delaunay三角剖分效果图1
Delaunay三角剖分效果图2

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 02:18:03