能否基于已有Delaunay三角剖分直接绘制Voronoi图?
可以直接叠加Voronoi剖分
完全可以在你已有的Delaunay三角剖分绘图上叠加对应的Voronoi图,实现起来很简单——因为Delaunay三角剖分和Voronoi图是对偶图关系,Scipy的scipy.spatial模块同时提供了两者的实现,且可以共用同一组原始点数据。
针对你的环境(Python 3.9.7 + Matplotlib 3.8.4),只需要在原有代码基础上添加几行即可实现叠加:
import numpy as np import matplotlib.pyplot as plt from scipy.spatial import Delaunay, Voronoi from scipy.spatial.voronoi_plot_2d import voronoi_plot_2d points = np.array([[0, 0], [1, 0], [0.5, 0.5], [1 , 0.5]]) tri = Delaunay(points) fig, ax = plt.subplots(figsize=(8, 4)) ax.set_aspect('equal', 'box') # 绘制Delaunay三角剖分 plt.triplot(points[:,0], points[:,1], tri.simplices.copy(), color='blue') plt.plot(points[:,0], points[:,1], 'bo') # 生成并绘制Voronoi图(叠加在同一子图上) vor = Voronoi(points) voronoi_plot_2d(vor, ax=ax, show_points=False, show_vertices=False, line_colors='red', line_width=1.5) plt.show()
关键说明:
- 导入
Voronoi类和voronoi_plot_2d工具函数,后者专门用于快速绘制2D Voronoi图 - 用同一组
points生成Voronoi对象 - 调用
voronoi_plot_2d时指定ax=ax,确保图形绘制在已有的子图中;通过show_points=False和show_vertices=False避免重复绘制原始点和Voronoi顶点(如果需要显示可以去掉这两个参数) - 可以通过
line_colors、line_width等参数调整Voronoi图的样式,和Delaunay图区分开
内容的提问来源于stack exchange,提问作者Andrew
相关产品推荐
相关产品推荐

