# How can we increase/decrease the number of triangles in a triangulation that is created from a polyshape object?

3 views (last 30 days)

Show older comments

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 Comments

### Answers (3)

Matt J
on 20 May 2023

Edited: Matt J
on 20 May 2023

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 Comments

Image Analyst
on 20 May 2023

##### 0 Comments

Matt J
on 22 May 2023

Edited: Matt J
on 22 May 2023

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 Comments

### See Also

### Categories

### Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!