1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
| clear
A=[3 3 1];xA=A(1);yA=A(2);zA=A(3);
B=[-4 1 1];xB=B(1);yB=B(2);zB=B(3);
C=[-2 -4 1];xC=C(1);yC=C(2);zC=C(3);
D=[1.5 1.5 6];xD=D(1);yD=D(2);zD=D(3);
X = [A(1) B(1) C(1) A(1) D(1) B(1) D(1) C(1)];
Y = [A(2) B(2) C(2) A(2) D(2) B(2) D(2) C(2)];
Z = [A(3) B(3) C(3) A(3) D(3) B(3) D(3) C(3)];
figure(1)
plot3(X,Y,Z)
hold on
plot3(A(1),A(2),A(3),'.k','MarkerSize',40)
plot3(B(1),B(2),B(3),'.g','MarkerSize',40)
plot3(C(1),C(2),C(3),'.r','MarkerSize',40)
plot3(D(1),D(2),D(3),'.b','MarkerSize',40)
grid
axis(6*[-1 1 -1 1 -1 1])
view(20,20)
rotate3d on
P = -6 + 12*rand(10000,3);% Points au hasard
hold on
plot3(P(:,1),P(:,2),P(:,3),'.r')
% Equation de la droite en 3D
%x-xA=ka
%y-yA=kb
%z-zA=kc
% Droite AD
text(xA+0.2,yA+0.2,zA,'A','FontSize',23)
% Droite BD
text(xB+0.2,yB+0.2,zB,'B','FontSize',23)
% Droite CD
text(xC+0.2,yC+0.2,zC,'C','FontSize',23)
text(xD+0.2,yD+0.2,zD,'D','FontSize',23)
figure(2)
plot3(X,Y,Z,'LineWidth',3)
hold on
grid
axis(8*[-1 1 -1 1 -1 1])
view(20,20)
rotate3d on
pas=0.001;% Pas des coupes du tétraèdre
for z=6:-pas:1
% Droite AD
[xAD,yAD]=droitexyz([xA yA zA],[xD yD zD],z-pas);
% Droite BD
[xBD,yBD]=droitexyz([xB yB zB],[xD yD zD],z-pas);
% Droite CD
[xCD,yCD]=droitexyz([xC yC zC],[xD yD zD],z-pas);
xv=[xAD;xBD;xCD;xAD];
yv=[yAD;yBD;yCD;yAD];
Id=find(P(:,3) >= z-1*pas & P(:,3) < z);% Recherche des points dans la tanche z-pas à z
P1=P(Id,1);
P2=P(Id,2);
P3=P(Id,3);
in = inpolygon(P1,P2,xv,yv);% Points inclus dans la coupe
plot3(P1(in),P2(in),P3(in),'.r','MarkerSize',5)
end |