Code : Tout sélectionner
import graph ;
import math ;
import geometry ;
import interpolate ;
import solids ;
import three ;
unitsize(0.5cm,0.5cm) ;
currentprojection=orthographic(5,2.5,2.5) ;
real x = 8 ;
real h = 30 - x ;
// Point
triple pA=(x,0,x) ;
triple pB=(x,x,x) ;
triple pC=(0,x,x) ;
triple pD=(0,0,x) ;
triple pA1=(x,0,0) ;
triple pB1=(x,x,0) ;
triple pC1=(0,x,0) ;
triple pD1=(0,0,0) ;
triple pO1=0.5*(pA1+pC1) ;
triple pO=0.5*(pA+pC) ;
triple pS = (pO.x,pO.y,h) ;
// On agrandit le cube unité.
// On le dessine sans lumière et avec transparence, les traits cachés sont alors
// plus clair.
transform3 mul = scale3(x) ;
draw(mul*unitcube,white+opacity(0.7),linewidth(1.5bp)+rgb("0000AC"),nolight) ;
// La pyramide
path3[] faces={
pA--pB--pC--pD--cycle,
pS--pA--pB--cycle,
pS--pB--pC--cycle,
pS--pC--pD--cycle,
pS--pD--pA--cycle,
} ;
draw(surface(faces),white+opacity(0.7),linewidth(1.5bp)+rgb("0000AC"),nolight);
draw(pS--pO1^^pA--pO,linewidth(1.5bp)+rgb("0000AC")+dashed) ;
label("$ A $",pA,W) ;
dot(pA,linewidth(2bp)) ;
label("$ B $",pB,E) ;
dot(pB,linewidth(2bp)) ;
label("$ C $",pC,E) ;
dot(pC,linewidth(2bp)) ;
label("$ D $",pD,W) ;
dot(pD,linewidth(2bp)) ;
label("$ A' $",pA1,W) ;
dot(pA1,linewidth(2bp)) ;
label("$ B' $",pB1,E) ;
dot(pB1,linewidth(2bp)) ;
label("$ C' $",pC1,E) ;
dot(pC1,linewidth(2bp)) ;
label("$ D' $",pD1,W) ;
dot(pD1,linewidth(2bp)) ;
label("$ O $",pO,W) ;
dot(pO,linewidth(2bp)) ;
label("$ O' $",pO1,W) ;
dot(pO1,linewidth(2bp)) ;
label("$ S $",pS,N) ;
dot(pS,linewidth(2bp)) ;
Olivier