Delaunay(德劳内)三⾓剖分算法在和领域, 平⾯上的点集P的德劳内三⾓化是⼀种三⾓剖分 DT(P),使得在 P 中没有点严格处于 DT(P) 中任意⼀个三⾓形的内部。Delaunay 三⾓化最⼤化了此三⾓剖分中三⾓形的最⼩⾓,换句话,此算法尽量避免出现“极瘦”的三⾓形。此算法命名来源于,以纪念他⾃1934年在此领域的⼯作【1】。德劳内三⾓化算法对给定的点集合的凸包进⾏三⾓形分隔,使得每个三⾓形的外接圆都不含任何点。 import numpy as np
import pylab as pl
收缩薄膜from scipy import spatial
points2d = np.array([[0.2, 0.1], [0.5, 0.5], [0.8, 0.1],
[0.5, 0.8], [0.3, 0.6], [0.7, 0.6], [0.5, 0.35]])
来电显示管理系统vo = spatial.Voronoi(points2d)
minip2px = np.array([46.445, 263.251, 174.176, 280.899, 280.899,
189.358, 135.521, 29.638, 101.907, 226.665])
y = np.array([287.865, 250.891, 287.865, 160.975, 54.252,
160.975, 232.404, 179.187, 35.765, 71.361])
points2d = np.c_[x, y]
dy = spatial.Delaunay(points2d)
vo = spatial.Voronoi(points2d)
#%fig=德劳内三⾓形的外接圆与圆⼼
cx, cy = vo.vertices.T
relay-spdtax = pl.subplot(aspect="equal")
灯头盒spatial.delaunay_plot_2d(dy, ax=ax)
ax.plot(cx, cy, "r.")
for i, (cx, cy) in enumerate(vo.vertices):
px, py = points2d[dy.simplices[i, 0]]
radius = np.hypot(cx - px, cy - py)
circle = pl.Circle((cx, cy), radius, fill=False, ls="dotted")
ax.add_artist(circle)
ax.set_xlim(0, 300)
ax.set_ylim(0, 300);
maop
【1】B. Delaunay: Sur la sphère vide, Izvestia Akademii Nauk SSSR, Otdelenie Matematicheskikh i Estestvennykh Nauk,
7:793–800, 1934