How to use Delaunay Triangulation to create a plane with constraints?
7 views (last 30 days)
I have four coplanar points shown in red and I want to create a plane bounded by these four points (representing a wall). The green points represent constraints in the wall that I want to be empty in the plane. I want to use Delaunay Triangulation do that but it fails because points are coplanar. what should I do?
Jeffrey Clark on 8 Nov 2022
@youssef hany, if all your points are coplanar for one section (in your picture a wall, floor, etc) they can be processed as 2D by dropping the constant dimension and using 2D delaunayTriangulation with constraints for windows, doors (regular and trap). If you are working in arbitrary 3D where coplanar points don't share the same one x, y or z you can rotate each coplanar section to eliminate one dimension using something like:
function Pxy = rotateCoplanar(Pxyz)
Rx = @(t) [ 1 0 0 ...
; 0 cos(t) -sin(t) ...
; 0 sin(t) cos(t) ];
% Ry = @(t) [ cos(t) 0 sin(t) ...
% ; 0 1 0 ...
% ; -sin(t) 0 cos(t) ];
Rz = @(t) [ cos(t) -sin(t) 0 ...
; sin(t) cos(t) 0 ...
; 0 0 1 ];
Pmean = mean(Pxyz,1);
Pnew = Pxyz-Pmean;
uT = cross(Pnew(1,:)-Pnew(3,:),Pnew(2,:)-Pnew(3,:)); uT = uT/norm(uT);
nx = Rz(atan2(uT(1),uT(2)));
uTnx = (nx*uT')';
Pxy = (Rx(atan2(uTnx(2),uTnx(3)))*nx*Pnew')'; Pxy = Pxy(:,1:2);