计算多边形域的近似中轴
使用受约束的德劳内三角剖分创建一个多边形域的近似中轴。多边形的中轴由多边形内部最大圆的中心的轨迹定义。
构造一个域边界上采样点的有约束德劳内三角剖分。
load trimesh2d
dt = delaunayTriangulation(x,y,Constraints);
inside = isInterior(dt);构造一个三角剖分来表示域中的三角形。
tr = triangulation(dt(inside,:),dt.Points);
构造一组联接相邻三角形外心的边。附加逻辑构造一个包含这样的边的唯一组。
numt = size(tr,1); T = (1:numt)'; neigh = neighbors(tr); cc = circumcenter(tr); xcc = cc(:,1); ycc = cc(:,2); idx1 = T < neigh(:,1); idx2 = T < neigh(:,2); idx3 = T < neigh(:,3); neigh = [T(idx1) neigh(idx1,1); T(idx2) neigh(idx2,2); T(idx3) neigh(idx3,3)]';
用绿色绘制域中的三角形,用蓝色绘制域边界,用红色绘制中轴。
clf triplot(tr,"g") hold on plot(xcc(neigh),ycc(neigh),"-r",LineWidth=1.5) axis([-10 310 -10 310]) axis equal plot(x(Constraints'),y(Constraints'),"-b",LineWidth=1.5) xlabel("Medial Axis of Polygonal Domain",FontWeight="b") hold off
