k = 4;
%Вершины тетраэдра P1
v1= [ 0, 0, 0;...
1.000000000000000, 0, 0;...
0.875942811492984, 1.100312685796844, 0;...
0.358184285119867, 0.171539751648851, 2.000000000000000];
%Вершины тетраэдра P2, вложенного в P1
v2= [0.571932608194886, 0.337094176268626, 0.585786240620734;...
0.704699684706738, 0.042223494692337, 0.192944505224134;...
0.437741457576473, 0.245854227348432, 0.991581476941187;...
0.500652716967284, 0.400077739788815, 0.059571697857093];
v12 = [v1; v2];
v12_lifted = zeros(size(v12)+[0,1]);%Lifted vertices array
%Lifting procedure
for i = 1:size(v12, 1)
if (i<=k)
v12_lifted(i,:) = [v12(i,:),0];
else
v12_lifted(i,:) = [v12(i,:),1];
end
end
K = convhulln(v12_lifted);%Находим выпуклую оболочку
%Для визуализации результатов триангуляциии использован класс Polyhedron из
%Multiparametric Toolbox 3
T1 = Polyhedron(v1);
T2 = Polyhedron(v2);
for i = 1:size(K,1)
%Отфильтровываем (как побочный продукт) триангуляцию исходных множеств P1 и P2
%Оставляем только триангуляцию P1\P2
if (~all(K(i,:)<=k))&&(~all(K(i,:)>k))
T1.plot('Alpha',0.4,'Color','r');
hold on;
T2.plot('Alpha',0.4,'Color','c');
P = Polyhedron(v12_lifted(K(i,:),1:size(v12,2)));
P.plot('Alpha',0.4,'Linewidth',2, 'Color','g','Marker','o');
waitforbuttonpress;
hold off;
end
end