Divide square faces into triangles

4 views (last 30 days)
bbah
bbah on 3 Jan 2020
Commented: bbah on 6 Jan 2020
Hello,
i have a faces matrix and i want to divide it into triangles
e.g. faces is a 100x4 matrix
and i want the same faces as triangles e.g. 123x3 ?
i tried it with the delaunayTriangulation but it distorts my mesh.
thank you

Accepted Answer

Matt J
Matt J on 3 Jan 2020
Edited: Matt J on 3 Jan 2020
If the vertices of the squares are all pre-ordered in counter-clockwise or clock-wise order, I think you could just do,
Triangulation=[ Faces(:,[1,2,3]) ; Faces(:,[3,4,1])] ;
If the vertices are not pre-ordered, it wouldn't be too difficult to loop through and sort them first.
  3 Comments
bbah
bbah on 6 Jan 2020
the way you did it i got only Triangulation = [faces(:,1),faces(:,2),faces(:,3)];
i did it with this loop and it works
for i = 1:length(faces)
first = faces(i,1);
second = faces(i,2);
third = faces(i,3);
fourth = faces(i,4);
first_lines(i,:) = [first second third];
second_lines(i+1,:) = [first third fourth];
end
second_lines(1,:) = [];
Triangulation = zeros(2*length(first_lines),3);
Triangulation(1:2:end-1) = first_lines;
Triangulation(2:2:end) = second_lines;
bbah
bbah on 6 Jan 2020
OR
first_lines = [faces(:,[1,2,3])];
second_lines = [faces(:,[1,3,4])];
faces = zeros(2*length(first_lines),3);
faces(1:2:end-1) = first_lines;
faces(2:2:end) = second_lines;

Sign in to comment.

More Answers (1)

Matt J
Matt J on 3 Jan 2020
I think you would have to do the following steps in a loop over all the faces,
  1. FInd a 2D coordinate system for the plane passing through each face
  2. Convert the 3D coordinates of each of the faces vertice to 2D coordinates
  3. Do a 2D Delaunay tringulation

Community Treasure Hunt

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

Start Hunting!