import three; ///////////////////////////////////////// void angledroit(picture pic=currentpicture, triple pO, triple pI, triple pJ, real size=.5, pen p=black, projection P=currentprojection){ triple imI=pO+size*unit(pI-pO), imJ=pO+size*unit(pJ-pO), imK=imI+imJ-pO; draw(imI--imK--imJ,p); } ///////////////////////////////////////// size(8cm,0); currentprojection=orthographic(4,2,4); triple v1=(9,0,1), v2=(0,10,2), pM=(0,0,3); path3 planP = plane(v1,v2,pM); // Représentation d'un plan dont (pM,v1,v2) est un repère. transform3 proj=planeproject(planP); triple pA=(2,7,11), pB=proj*pA, // pB projeté orthogonal de pA sur planP pC=pM+.8*v1+.7*v2, // pC point de coordonnées (.8,.7) dans le repère (pM,v1,v2) de planP. vnP=unit(cross(v1,v2)),// vecteur normal unitaire au planP pD=rotate(90,pC,pC+vnP)*pB; // point de planP tel que pBpCpD soit triangle rectangle isocèle en pC draw(surface(planP),paleblue+opacity(.3)); draw(pA--pB--pC--cycle); dot("$A$",pA); dot("$B$",pB); dot("$C$",pC,dir(pC-pB)); angledroit(pB,pA,pC,red); angledroit(pC,pD,pB,blue); angledroit(pC,pD,pA,green); label("$(P)$",pM,X+Y); real d=.2; draw(Label("$(d)$",EndPoint),interp(pC,pD,-d)--interp(pC,pD,1+d));