J'ai déjà posé cette question sur le forum officiel, mais je n'ai pas vraiment eu de réponses.
Il faut d'abord savoir que ce code provoque chez moi un rectangle noir qui vient probablement de ma carte graphique que je vais changer sous peu.
Ma question porte surtout sur le code :
est-ce la façon la plus élégante pour construire un tétraèdre ?
Merci.
- Code: Tout sélectionner
import three;
import graph3;
import math;
import animate;
import bsp;
settings.outformat="pdf";
settings.prc=true;
settings.render=4;
size(8cm);
currentprojection;
pen p=fontsize(8pt);
real a=2;
triple[] z={(0,0,0),(a,0,0),(0,a,0),(0,0,a)};
path3[] tetra={z[0]--z[1]--z[2]--cycle,z[0]--z[1]--z[3]--cycle,z[0]--z[2]--z[3]--cycle,z[3]--z[1]--z[2]--cycle};
for (int i=0; i<tetra.length; ++i){ draw(surface(tetra[i]),lightgrey+opacity(0.5),nolight);
draw(tetra[i]);}
triple N=midpoint(z[1]--z[2]);
path3 g5=z[0]--N;
draw(g5,dashed);
draw(shift(N-z[0])*g5);
real t=0.5;
triple M=(1-t)*z[0]+t*N;
path3 plan=plane(normal(tetra[0]),z[2]-z[1],shift(z[1]-N)*M);
triple[] T1=intersectionpoints(plan,tetra[2]);
triple[] T2=intersectionpoints(plan,tetra[1]);
draw(surface(T1[0]--T1[1]--T2[1]--T2[0]--cycle),red+opacity(0.5),nolight);
draw(T1[0]--T1[1]--T2[1]--T2[0]--cycle); limits(z[0],1.2*(z[1]+z[2]+z[3]));
xaxis3(Label("$x$",1),Arrow3);
yaxis3(Label("$y$",1),Arrow3);
zaxis3(Label("$z$",1),Arrow3);
label("A",z[1],NW,p); label("B",z[2],S,p);
label("C",z[3],NE,p); label("N",N,S+W,p);
label("K",T1[0],NE,p);
label("J",T1[1],NE,p);
label("L",T2[0],NW,p);
label("I",T2[1],NW,p);
label("O",z[0],NW,p);
shipout(bbox(1mm,blue+1bp));
PS : un petit clin d'oeil à OG qui doit avoir dans ses fichiers une petite animation que j'ai écrite !



