How can we increase/decrease the number of triangles in a triangulation that is created from a polyshape object?
11 次查看(过去 30 天)
显示 更早的评论
I wrote the following code:
C1 = polyshape(X1,Y1);
C2 = polyshape(X2,Y2);
C = subtract(C1,C2);
T = triangulate(C);
where X1, X2, Y1 & Y2 are column vectors of x- & y-coordinates of points that define the outer and inner boundaries of a region. The last command breaks the region C into triangles. My question is: How can we increase or decrease the numbr of triangles in the triangualtion or is it fixed?
0 个评论
回答(3 个)
Matt J
2023-5-20
编辑:Matt J
2023-5-20
To increase the number of triangles, you would have to add vertices along the edges, like in the following:
p1= polyshape([0,0; 1 0; 0 1]);
p2=polyshape([0,0,; 1 0; 0.5,0.5,;0,1],'Simplify',0);
doPlot(p1)
doPlot(p2)
function doPlot(p)
figure
plot(p,'FaceColor','g'); hold on
triplot(triangulation(p),'r'); hold off
axis equal
end
4 个评论
Image Analyst
2023-5-22
Add a very tiny bit of noise to the coordinates so they're no longer on a perfectly straight line.
Image Analyst
2023-5-20
To decrease the number of vertex points that describe a polygon while still somewhat resembling the original shape, see the algorithm in the attached paper.

0 个评论
Matt J
2023-5-22
编辑:Matt J
2023-5-22
Another way:
p1=nsidedpoly(6);
p2=p1.scale(0.5);
P=subtract(p1,p2);
P=subTri(P);
for i=1:3
P=splitTri(P);
end
plot(P); axis equal
function p=subTri(P)
%Sub-divide a scalar polyshape P into a vector of triangular sub-polyshapes
T=triangulation(P);
V=T.Points;
for i=height(T):-1:1
p(i)=polyshape(V(T(i,:),:));
end
p=p(:)';
end
function pnew=splitTri(p)
%Given a vector of triangular polyshapes, p, split each p(i) into smaller
%triangular polyshapes.
if isscalar(p)
V=interp1( p.Vertices([1,2,3,1],:) , 1:0.5:3.5);
pnew=subTri(polyshape(V,'Simplify',0));
else
C=arrayfun(@splitTri,p,'uni',0);
pnew=[C{:}];
end
end
0 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Elementary Polygons 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!




