% PfLEspace.mp
% Copyright 2024 Cédric Pierquet
% Source David Nivaud (https://melusine.eu.org/syracuse/exemples/)
% Released under the LaTeX Project Public License v1.3c or later, see http://www.latex-project.org/lppl.txt

def repplansimple = 
	%plan simple
	pair t,r;
	transform T,S;
	pickup pencircle scaled 0.025u;
	t = (4u,0u);
	r = (1u,2u);
	T = identity shifted t;
	S = identity shifted r;
	z0 = (0u,0u);
	z1 = z0 transformed T;
	z2 = z0 transformed S;
	z3 = z0 transformed T transformed S;
	draw z0--z2 ;
	draw z2--z3 ;
	draw z0--z1 withpen pencircle scaled 0.05u;
	draw z1--z3 withpen pencircle scaled 0.05u;
	%label.urt(btex $P$ etex scaled echelle, z0+(0.1u,0.025u));
enddef;

def repinterplan = 
	%intersection de deux plans
	pair t,r;
	transform T,S;
	path p[],q[];
	pickup pencircle scaled 0.025u;
	t=(4u,0u); r=(1u,2u);
	T = identity shifted t;
	S = identity shifted r;
	z0=(0u,0u);
	z1 = z0 transformed T;
	z2 = z0 transformed S;
	z3 = z0 transformed T transformed S;
	draw z0--z2;
	draw z0--z1 withpen pencircle scaled 0.05u;
	draw z1--z3 withpen pencircle scaled 0.05u;
	z5 = 0.5[z0,z1];
	z6 = z5 transformed S;
	z7 = (2.5u,-1u);
	z8 = z7 transformed S;
	z5 = 0.5[z9,z7];
	z10= z9 transformed S;
	draw z5--z6;
	draw z9--z7;
	draw z9--z10;
	draw z10--z6;
	draw z6--z3;
	draw z6--z8 dashed evenly;
	p1 = z2--z6;
	q1= z9--z10;
	z11 = p1 intersectionpoint q1;
	draw z11--z6 dashed evenly;
	draw z2--z11;
	p2 = z7--z8;
	q2= z5--z1;
	z12 = p2 intersectionpoint q2;
	draw z12--z8 dashed evenly;
	draw z7--z12;
	label.rt(btex $d$ etex scaled echelle, 0.5[z5,z6]);
enddef;

def repplantroispoints = 
	%representation d'un plan defini par trois points
	pair t,r;
	transform T,S;
	pickup pencircle scaled 0.025u;
	t=(4u,0u); r=(1u,2u);
	T = identity shifted t;
	S = identity shifted r;
	z0=(0u,0u);
	z1 = z0 transformed T;
	z2 = z0 transformed S;
	z3 = z0 transformed T transformed S;
	draw z0--z2;
	draw z2--z3;
	draw z0--z1 withpen pencircle scaled 0.05u;
	draw z1--z3 withpen pencircle scaled 0.05u;
	dotlabel.top(btex $A$ etex scaled echelle, (2.25u,1.5u));
	dotlabel.top(btex $B$ etex scaled echelle, (1.25u,.5u));
	dotlabel.top(btex $C$ etex scaled echelle, (3.25u,1u));
enddef;

def repplandeuxdroites = 
	%representation d'un plan defini par deux droites secantes
	pair t,r;
	transform T,S;
	pickup pencircle scaled 0.025u;
	t=(4u,0u); r=(1u,2u);
	T = identity shifted t;
	S = identity shifted r;
	z0=(0u,0u);
	z1 = z0 transformed T;
	z2 = z0 transformed S;
	z3 = z0 transformed T transformed S;
	draw z0--z2;
	draw z2--z3;
	draw z0--z1 withpen pencircle scaled 0.05u;
	draw z1--z3 withpen pencircle scaled 0.05u;
	z4 = (0.8u,1u);
	z5 =(4u,1.5u);
	draw z4--z5;
	z6 = (1u,1.6u);
	z7=(3.6u,0.4u);
	draw z6--z7;
	label.rt(btex $d$ etex scaled echelle, z5);
	label.rt(btex $d'$ etex scaled echelle, z7);
enddef;

def repplandroite = 
	%representation d'un plan defini par un point et une droite
	pair t,r;
	transform T,S;
	pickup pencircle scaled 0.025u;
	t=(4u,0u); r=(1u,2u);
	T = identity shifted t;
	S = identity shifted r;
	z0=(0u,0u);
	z1 = z0 transformed T;
	z2 = z0 transformed S;
	z3 = z0 transformed T transformed S;
	draw z0--z2;
	draw z2--z3;
	draw z0--z1 withpen pencircle scaled 0.05u;
	draw z1--z3 withpen pencircle scaled 0.05u;
	dotlabel.top(btex $A$ etex scaled echelle, (2.05u,1.35u));
	z4 = (1u,.5u);
	z5 = (3.25u,1.05u);
	draw z4--z5;
	label.top(btex $d$ etex scaled echelle, z5);
enddef;

def repplandtespara = 
	%representation d'un plan defini par deux droites parallèles
	pair t,r;
	transform T,S;
	pickup pencircle scaled 0.025u;
	t=(4u,0u); r=(1u,2u);
	T = identity shifted t;
	S = identity shifted r;
	z0=(0u,0u);
	z1 = z0 transformed T;
	z2 = z0 transformed S;
	z3 = z0 transformed T transformed S;
	draw z0--z2;
	draw z2--z3;
	draw z0--z1 withpen pencircle scaled 0.05u;
	draw z1--z3 withpen pencircle scaled 0.05u;
	z4 = (1u,1.15u);
	z5 =(3u,1.65u);
	draw z4--z5;
	z6 = (1.5u,0.2u);
	z7 = z6 shifted (z5-z4);
	draw z6--z7;
	label.rt(btex $d$ etex scaled echelle, z5);
	label.rt(btex $d'$ etex scaled echelle, z7);
enddef;

def droitesnoncoplan = 
	%representation de deux droites non parallelles et sans point commun
	pair t,r;
	transform T,S;
	pickup pencircle scaled 0.025u;
	t=(4u,0u); r=(1u,2u);
	T = identity shifted t;
	S = identity shifted r;
	path p[];
	z0=(0u,0u);
	z1 = z0 transformed T;
	z2 = z0 transformed S;
	z3 = z0 transformed T transformed S;
	draw z0--z2;
	draw z2--z3;
	draw z0--z1 withpen pencircle scaled 0.05u;
	draw z1--z3 withpen pencircle scaled 0.05u;
	z4 = (0.5u,.5u);
	z5 = (4u,1u);
	draw z4--z5;
	label.top(btex $d$ etex scaled echelle, z5);
	z6 = (2u,1.5u);
	z7 = (0.2u,1u);
	dotlabel.rt(btex $A$ etex scaled echelle, z6);
	z9 = z6 shifted z7;
	z10 = z6 shifted -2z7;
	p1 = z6--z10;
	p2 = z0--z1;
	z11 = p1 intersectionpoint p2;
	draw z6--z11 dashed evenly;
	draw z11--z10;
	draw z6--z9;
	label.rt(btex $d'$ etex scaled echelle, z10);
enddef;

def repincidence = 
	%representation d'un plan
	pair t,r;
	transform T,S;
	path p[],q[];
	pickup pencircle scaled 0.025u;
	t=(4u,0u); r=(1u,2u);
	T = identity shifted t;
	S = identity shifted r;
	z0=(0u,0u);
	z1 = z0 transformed T;
	z2 = z0 transformed S;
	z3 = z0 transformed T transformed S;
	draw z0--z2;
	draw z0--z1 withpen pencircle scaled 0.05u;
	draw z1--z3 withpen pencircle scaled 0.05u;
	z4=(0u,-2.2u);
	z5 = z4 transformed T;
	z6 = z4 transformed S;
	z7 = z4 transformed T transformed S;
	draw z4--z6;
	draw z4--z5 withpen pencircle scaled 0.05u;
	draw z5--z7 withpen pencircle scaled 0.05u;
	z8=1/5[z0,z1]+1/2[z0,z2];
	z9=3/5[z4,z5]+1/2[z6,z4];
	draw z8--z9;
	z10 = z8 transformed S;
	draw z8--z10;
	z11 = z9 transformed S;
	p1 = z10--z11;
	q1 = z2--z3;
	q2 = z0--z1;
	q3 = z6--z7;
	z12 = p1 intersectionpoint q1;
	z13 = p1 intersectionpoint q2;
	z14 = p1 intersectionpoint q3;
	draw z10--z12;
	draw z12--z13 dashed evenly;
	draw z13--z14;
	draw z14--z11 
	dashed evenly;
	p2 = z8--z10;
	z15 = p2 intersectionpoint q1;
	draw z2--z15;
	draw z15--z12 dashed evenly;
	draw z12--z3;
	p3 = z8--z9;
	z16 = p3 intersectionpoint q2;
	z17 = p3 intersectionpoint q3;
	q4 = z4--z5;
	z18 = p3 intersectionpoint q4;
	draw z16--z12;
	draw z6--z17;
	draw z17--z14 dashed evenly;
	draw z14--z7;
	draw z18--z14;
	p4 = z9--z11;
	z19 = p4 intersectionpoint q4;
	draw z9--z19;draw z19--z11 dashed evenly;
	label.rt(btex $d$ etex scaled echelle, 0.5[z12,z16]);
	label.rt(btex $d'$ etex scaled echelle, 0.5[z18,z14]);
enddef;

def repdroiteparaplans = 
	%droite parallele a deux plans secants
	pair t,r;
	transform T,S;
	path p[];
	pickup pencircle scaled 0.025u;
	t=(4u,1u); r=(0u,2u);
	T = identity shifted t;
	S = identity shifted r;
	z0=(0u,0u);
	z1 = z0 transformed T;
	z2 = z0 transformed S;
	z3 = z0 transformed T transformed S;
	draw z0--z2;
	draw z2--z3;
	draw z1--z3;
	z4=0.5[z0,z1];
	z5 = z4 transformed S;
	draw z4--z5;
	label.lft(btex $\Delta$ etex scaled echelle,0.5[z4,z5]);
	z6 = z4 shifted (1.5u,-1u);
	z4=0.5[z6,z7];
	z8 = z6 transformed S;
	z9 = z7 transformed S;
	draw z0--z4;
	draw z4--z6;
	draw z6--z8;
	draw z8--z9;
	draw z4--z7 dashed evenly;
	p1= z4--z1;
	p2 = z6--z8;
	z10 = p1 intersectionpoint p2;
	draw z4--z10 dashed evenly;draw z10--z1;
	p3 = z2--z3;
	p4 = z9--z7;
	z11 = p3 intersectionpoint p4;
	draw z11--z9;
	draw z11--z7 dashed evenly;
	draw z7--z4 dashed evenly;
	z12 = (-1u,0u);
	z13 = z12 shifted (0u,3u);
	draw z13--z12;
	label.lft(btex $d$ etex scaled echelle, z12);
enddef;

def reptoit = 
	%theoreme du toit
	pair t,r,v;
	transform T,S,V;
	path p[];
	pickup pencircle scaled 0.025u;
	t=(3u,2u); r=(-2u,1.5u);v=(-3u,0u); 
	T = identity shifted t;
	S = identity shifted r;
	V = identity shifted v;
	z0=(0u,0u);
	z1 = z0 transformed T;
	z2 = z0 transformed S;
	z3 = z0 transformed S transformed T;
	z4 = z0 transformed V;
	z5 = z0 transformed V transformed T;
	draw z0--z1;
	draw z2--z3;
	z101=0.1[z0,z1]; z10=0.9[z0,z1];
	z23 = z101 transformed S;
	z32=z10 transformed S;
	z45 = z101 transformed V;
	z54=z10 transformed V;
	draw z101--z23;
	draw z10--z32;
	draw z23--z45;
	draw z32--z54 dashed evenly;
	p1 = z101--z23;
	p2 = z4--z5;
	z11 = p1 intersectionpoint p2;
	draw z4--z11;
	draw z11--z5 dashed evenly;
	label.lft(btex $d$ etex scaled echelle, z0);
	label.lft(btex $d'$ etex scaled echelle, z4);
	label.top(btex $\Delta$ etex scaled echelle, z2);
enddef;

def repplanspara = 
	% plans paralleles a l'aide de droites secantes
	pair t,r;
	transform T,S;
	pickup pencircle scaled 0.025u;
	t=(4u,0u); r=(1u,2u);
	T = identity shifted t;
	S = identity shifted r;
	z0=(0u,0u);
	z1 = z0 transformed T;
	z2 = z0 transformed S;
	z3 = z0 transformed T transformed S;
	draw z0--z2;
	draw z2--z3;
	draw z0--z1 withpen pencircle scaled 0.05u;
	draw z1--z3 withpen pencircle scaled 0.05u;
	z4 = (0.8u,1u);
	z5 =(4u,1.5u);
	draw z4--z5;
	z6 = (1u,1.6u);
	z7=(3.6u,0.4u);
	draw z6--z7;
	label.rt(btex $d$ etex scaled echelle, z5);
	label.rt(btex $d'$ etex scaled echelle, z7);
	z10=(0u,-2.5u);
	z11 = z10 transformed T;
	z12 = z10 transformed S;
	z13 = z10 transformed T transformed S;
	draw z10--z12;
	draw z12--z13;
	draw z10--z11 withpen pencircle scaled 0.05u;
	draw z11--z13 withpen pencircle scaled 0.05u;
	z14 = (0.8u,-1.5u); z15 =(4u,-1u);draw z14--z15;
	z16 = (1u,-0.9u);z17=(3.6u,-2.1u);draw z16--z17;
	label.rt(btex $d_{1}$ etex scaled echelle, z15);
	label.rt(btex $d'_{1}$ etex scaled echelle, z17);
enddef;

def repdteplanpara =
	% parallelisme plan et droite
	pair t,r;
	transform T,S;
	pickup pencircle scaled 0.025u;
	t=(4u,0u); r=(1u,2u);
	T = identity shifted t;
	S = identity shifted r;
	z0=(0u,0u);
	z1 = z0 transformed T;
	z2 = z0 transformed S;
	z3 = z0 transformed T transformed S;
	draw z0--z2;
	draw z2--z3;
	draw z0--z1 withpen pencircle scaled 0.05u;
	draw z1--z3 withpen pencircle scaled 0.05u;
	z4 = (1u,.5u);
	z5 = (4u,1u);
	draw z4--z5;
	label.top(btex $d'$ etex scaled echelle, z4);
	z6 = (1u,2.5u);
	z7 = z6 shifted z5-z4;
	draw z6--z7;
	label.top(btex $d$ etex scaled echelle, z6);
enddef;

def repdtesortho =
	%droites orthogonales 
	pair t,r;
	transform T,S;
	pickup pencircle scaled 0.025u;
	t=(2u,3u); r=(0u,2u);
	T = identity shifted t;
	S = identity shifted r;
	z0=(0u,0u);
	z1 = z0 transformed T;
	z2 = z0 transformed S;
	draw z0--z1;
	draw z0--z2;
	label.bot(btex $I$ etex scaled echelle, z0);
	z3=0.1[z0,z1];
	z4=0.1[z0,z2];
	z5=z3 shifted z4-z0;
	draw z3--z5;
	draw z4--z5;
	z6=(0u,-1u);
	z7 = z6 transformed T;
	draw z7--z6;
	label.bot(btex $\Delta$ etex scaled echelle, z7);
	z8=(-1u,-1u);
	z9= z8 transformed S;
	label.lft(btex $d$ etex scaled echelle, z9);
	draw z9--z8;
enddef;

def repdroiteorthoplan = 
	%droite orthogonale a un plan
	pair t,r;
	transform T,S;
	path p[];
	pickup pencircle scaled 0.025u;
	t=(4u,0u); r=(1u,2u);
	T = identity shifted t;
	S = identity shifted r;
	z0=(0u,0u);
	z1 = z0 transformed T;
	z2 = z0 transformed S;
	z3 = z0 transformed T transformed S;
	draw z0--z2;
	draw z2--z3;
	draw z0--z1 withpen pencircle scaled 0.05u;
	draw z1--z3 withpen pencircle scaled 0.05u;
	z4 = (0.8u,1u);
	z5 =(4u,1.5u);
	draw z4--z5;
	z6 = (1u,1.6u);
	z7=(3.6u,0.4u);
	draw z6--z7;
	label.rt(btex $d$ etex scaled echelle, z5);
	label.rt(btex $d'$ etex scaled echelle, z7);
	p1 = z4--z5;p2 = z6--z7;
	z8 = p1 intersectionpoint p2;
	z9 = z8 shifted (0u,2u);
	label.rt(btex $\Delta$ etex scaled echelle, z9);
	draw z8--z9;
	z10 = z8 shifted (0u,-2u);
	p3 = z9--z10;
	p4 = z0--z1;
	z11 = p3 intersectionpoint p4;
	draw z8--z11 dashed evenly;
	draw z11--z10;
	z12=0.1[z8,z7];
	z13=0.1[z8,z9];
	z14= z13 shifted z12-z8;
	draw z12--z14;
	draw z13--z14;
	z15=0.2[z8,z4];
	z16=0.1[z8,z9];
	z17= z16 shifted z15-z8;
	draw z15--z17;
	draw z16--z17;
enddef;

def repplansparadroiteortho = 
	%plans paralleles et droite orthogonale
	pair t,r;
	transform T,S;
	pickup pencircle scaled 0.025u;
	t=(4u,0u); r=(1u,2u);
	T = identity shifted t;
	S = identity shifted r;
	path p[];
	z0=(0u,0u);
	z1 = z0 transformed T;
	z2 = z0 transformed S;
	z3 = z0 transformed T transformed S;
	draw z0--z2;
	draw z2--z3;
	draw z0--z1 withpen pencircle scaled 0.05u;
	draw z1--z3 withpen pencircle scaled 0.05u;
	z4 = (0.8u,1u); z5 =(4u,1.5u);draw z4--z5;
	z6 = (1u,1.6u);z7=(3.6u,0.4u);draw z6--z7;
	label.rt(btex $d$ etex scaled echelle, z5);
	label.rt(btex $d'$ etex scaled echelle, z7);
	z10=(0u,-2.5u);
	z11 = z10 transformed T;
	z12 = z10 transformed S;
	z13 = z10 transformed T transformed S;
	draw z10--z12;
	draw z12--z13;
	draw z10--z11 withpen pencircle scaled 0.05u;
	draw z11--z13 withpen pencircle scaled 0.05u;
	z14 = (0.8u,-1.5u);
	z15 =(4u,-1u);
	draw z14--z15;
	z16 = (1u,-0.9u);
	z17=(3.6u,-2.1u);
	draw z16--z17;
	label.rt(btex $d_{1}$ etex scaled echelle, z15);
	label.rt(btex $d'_{1}$ etex scaled echelle, z17);
	p1=z4--z5;
	p2=z6--z7;
	p3=z14--z15;
	p4=z16--z17;
	p5=z0--z1;
	p6=z10--z11;
	z20 = p1 intersectionpoint p2;
	z21 = p3 intersectionpoint p4;
	p7 = z20--z21;
	z22 = p7 intersectionpoint p5;
	z24 = z20 shifted (0u,1.5u);
	z25 = z21 shifted (0u,-1.5u);
	p8 = z21--z25;
	z23 = p8 intersectionpoint p6;
	draw z24--z20;
	draw z20--z22 dashed evenly;
	draw z22--z21; 
	draw z21--z23 
	dashed evenly;
	draw z23--z25;
	label.rt(btex $\Delta$ etex scaled echelle, z24);
	z30=0.2[z20,z4];
	z31=0.1[z20,z24];
	z32 = z31 shifted z30-z20;
	draw z32--z30;
	draw z32--z31;
	z40=0.2[z21,z14];
	z41=0.1[z21,z22];
	z42 = z41 shifted z40-z21;
	draw z42--z40;
	draw z42--z41;
	z50=0.1[z20,z7];
	z51=0.1[z20,z24];
	z52 = z51 shifted z50-z20;
	draw z52--z50;
	draw z52--z51;
	z60=0.1[z21,z17];
	z61=0.1[z21,z22];
	z62 = z61 shifted z60-z21;
	draw z62--z60;
	draw z62--z61;
enddef;

def repdrtoitesorthoplanspara = 
	%droites orthogonales a deux plans paralleles
	pair t,r;
	transform T,S;
	pickup pencircle scaled 0.025u;
	t=(4u,0u); r=(1u,2u);
	T = identity shifted t;
	S = identity shifted r;
	path p[];
	z0=(0u,0u);
	z1 = z0 transformed T;
	z2 = z0 transformed S;
	z3 = z0 transformed T transformed S;
	draw z0--z2;
	draw z2--z3;
	draw z0--z1 withpen pencircle scaled 0.05u;
	draw z1--z3 withpen pencircle scaled 0.05u;
	z10=(0u,-2.5u);
	z11 = z10 transformed T;
	z12 = z10 transformed S;
	z13 = z10 transformed T transformed S;
	draw z10--z12;
	draw z12--z13;
	draw z10--z11 withpen pencircle scaled 0.05u;
	draw z11--z13 withpen pencircle scaled 0.05u;
	z20 = (2u,1u);
	z26 = z20 shifted (0u,-2.5u);
	z21 = z20 shifted (0u,2u);
	z22 = z20 shifted (0u,-4.5u);
	p1 = z21--z22;
	p2 = z0--z1;
	p3 = z10--z11;
	z24 = p1 intersectionpoint p2;
	z25 = p1 intersectionpoint p3;
	draw z21--z20;
	draw z20--z24 dashed evenly;
	draw z24--z26;
	draw z26--z25 dashed evenly;
	draw z25--z22;
	z30 = (3u,1.5u);
	z36 = z30 shifted (0u,-2.5u);
	z31 = z30 shifted (0u,2u);
	z32 = z30 shifted (0u,-4.5u);
	p11 = z31--z32;
	p12 = z0--z1;
	p13 = z10--z11;
	z34 = p11 intersectionpoint p12;
	z35 = p11 intersectionpoint p13;
	draw z31--z30;
	draw z30--z34 dashed evenly;
	draw z34--z36;
	draw z36--z35 dashed evenly;
	draw z35--z32;
	z40=0.1[z20,z30];
	z41=0.1[z20,z21];
	z42 = z41 shifted z40-z20;
	draw z42--z40;
	draw z42--z41;
	z50=0.1[z30,z20];
	z51=0.1[z30,z31];
	z52 = z51 shifted z50-z30;
	draw z52--z50;
	draw z52--z51;
	z60=0.1[z26,z36];
	z61=0.1[z26,z24];
	z62 = z61 shifted z60-z26;
	draw z62--z60;
	draw z62--z61;
	z70=0.1[z36,z26];
	z71=0.2[z36,z34];
	z72 = z71 shifted z70-z36;
	draw z72--z70;
	draw z72--z71;
	draw z20--z30;
	draw z26--z36;
enddef;

def repplansperp = 
	%intersection de deux plans perpendiculaires
	pair t,r;
	transform T,S;
	path p[],q[];
	pickup pencircle scaled 0.025u;
	t=(4u,0u); r=(1u,2u);
	T = identity shifted t;
	S = identity shifted r;
	z0=(0u,0u);
	z1 = z0 transformed T;
	z2 = z0 transformed S;
	z3 = z0 transformed T transformed S;
	draw z0--z2;
	draw z0--z1 withpen pencircle scaled 0.05u;
	draw z1--z3 withpen pencircle scaled 0.05u;
	z5 = 0.5[z0,z1];
	z6 = z5 transformed S;
	z7 = z5 shifted (0u,-2.5u);
	z8 = z7 transformed S;
	z5 = 0.5[z9,z7];
	z10= z9 transformed S;
	draw z5--z6; 
	draw z9--z7;
	draw z9--z10;
	draw z10--z6;
	draw z6--z3;
	draw z7--z8;
	p1 = z2--z6;
	q1= z5--z9;
	z11 = p1 intersectionpoint q1;
	draw z11--z6 dashed evenly;
	draw z2--z11;
	p2 = z6--z8;
	q2= z5--z1;
	z12 = p2 intersectionpoint q2;
	draw z12--z6 dashed evenly;
	draw z8--z12;
	label.rt(btex $d$ etex scaled echelle, 0.6[z5,z6]);
	z13=0.5[z5,z6];
	z14 = z13 shifted (0u,2u);
	z15 = z13 shifted (0u,-2u);
	p3 = z0--z1;
	q3 = z13--z15;
	z16 = p3 intersectionpoint q3;
	draw z14--z13;
	draw z13--z16 dashed evenly;
	draw z16--z15;
	z20=0.2[z13,z6];
	z21=0.2[z13,z14];
	z22 = z21 shifted z20-z13;
	draw z22--z20;
	draw z22--z21;
	z17 = z13 shifted 0.8(z1-z5);
	z18 = z13 shifted 0.8(z0-z5);
	p4 = z13--z18;
	z19 = q1 intersectionpoint p4;
	draw z18--z19;
	draw z19--z13 dashed evenly;
	draw z13--z17;
	z30=0.1[z13,z18];z31=0.1[z13,z14];
	z32 = z31 shifted z30-z13;
	draw z32--z30;
	draw z32--z31;
enddef;

def repplansperpplan = 
	%plans perpendiculaires a un meme plan
	pair t,r;
	transform T,S;
	path p[],q[];
	pickup pencircle scaled 0.025u;
	t=(5u,0u); r=(1u,2.3u);
	T = identity shifted t;
	S = identity shifted r;
	z0=(0u,0u);
	z1 = z0 transformed T;
	z2 = z0 transformed S;
	z3 = z0 transformed T transformed S;
	draw z0--z2;
	draw z0--z1 withpen pencircle scaled 0.05u;
	draw z1--z3 withpen pencircle scaled 0.05u;
	z4= 1/4[z0,z1];
	z5= 3/4[z0,z1];
	z6= 1/2[z4,z5]; 
	z7 =  z6 shifted (0u,1u);
	draw z4--z7;
	draw z5--z7;
	z8 = z4 shifted (0u,2u);
	z9 = z5 shifted (0u,2u);
	z10 = z7 shifted (0u,2u);
	z4=0.5[z8,z11];
	z5=0.5[z12,z9];
	z7=0.5[z13,z10];
	draw z8--z11;
	draw z8--z10;
	draw z12--z9;
	draw z9--z10;
	draw z7--z10;
	draw z7--z6 dashed evenly;
	draw z6--z13;
	draw z11--z13;
	draw z13--z12;
	p1 = z2--z3;
	q1 = z8--z10;
	q2=z9--z10;
	z14= p1 intersectionpoint q1;
	z15= p1 intersectionpoint q2;
	draw z2--z14;
	draw z14--z15 dashed evenly;
	draw z15--z3;
	z20=0.1[z7,z10];
	z21=0.2[z7,z4];
	z22 = z21 shifted z20-z7;
	draw z22--z20;
	draw z22--z21;
	z30=0.1[z7,z10];
	z31=0.2[z7,z5];
	z32 = z31 shifted z30-z7;
	draw z32--z30;
	draw z32--z31;
enddef;