Programme Maple pour polyèdre convexe with(plots): #---- Equation du plan passant par 3 points [x1,y1,z1], [x2,y2,z2],[x3,y3,z3] ------------- EQplan:= proc(x1,y1,z1,x2,y2,z2,x3,y3,z3) ((-z2+z3)*y1+(z1-z3)*y2-y3*(z1 - z2))*x+ ((z2-z3)*x1+(-z1+z3)*x2+x3*(z1-z2))*y+ ((-y2+y3)*x1+(y1-y3)*x2-x3*(y1-y2))*z+ (x1*y2-x2*y1)*z3+x2*y3*z1+x3*(y1*z2-y2*z1)-x1*y3*z2: end: montube:=proc(L,r,col) local n : n:=nops(L): seq(tubeplot( expand(L[i,1]+t*(L[i,2]-L[i,1])),t=0..1,radius=r,grid=[3,20],color=col),i=1..n): end: with(geom3d): lg:=1.: point(A,[0,0,0]): icosidodecahedron(gon,A,lg): Lsom:=vertices(gon): Lfaces:=faces(gon): Laretes:={seq(seq({Lfaces[i,j],Lfaces[i,j mod nops(Lfaces[i]) +1]},j=1..nops(Lfaces[i])),i=1..nops(Lfaces))}: #nops(Laretes); Leq_faces:=map( u -> EQplan(op(u[1]),op(u[2]),op(u[3])),Lfaces): Lcentre:=add(Lsom[i],i=1..nops(Lsom))/nops(Lsom): #==== pour les polyèdres avec geom3d, Lcentre:=A directement Lsign:=map(sign,evalf(subs(x=Lcentre[1],y=Lcentre[2],z=Lcentre[3],Leq_faces))): Leq_faces_sign:=[seq(Leq_faces[i]*Lsign[i],i=1..nops(Leq_faces))]: K:=lg: ro:=0.01: npas:=80: display([implicitplot3d( min(seq(Leq_faces_sign[i],i=1..nops(Leq_faces_sign)) ), x=-K..K,y=-K..K,z=-K..K, grid=[npas,npas,npas],color=cyan,style=patchnogrid,transparency=0.4) ,montube(Laretes,ro,COLOR(RGB,1,0.8,0.3)) #==== le polyèdre tracé aves ses arêtes ===== ],style=patchnogrid,scaling=constrained,axes=none,orientation=[90,45,180]);