主要内容

计算多边形域的近似中轴

使用受约束的德劳内三角剖分创建一个多边形域的近似中轴。多边形的中轴由多边形内部最大圆的中心的轨迹定义。

构造一个域边界上采样点的有约束德劳内三角剖分。

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

Figure contains an axes object. The axes object with xlabel Medial Axis of Polygonal Domain contains 364 objects of type line.