Suite des coefficients d'un polynôme pour POVRAY


Le programme de Ray-tracing Povray permet en particulier de réprésenter les surfaces d'équation P(x,y,z) = 0 où P est un polynôme en x, y, z de degré n par l'instruction :
poly { n, < suite des coefficients nuls ou non du polynôme ordonné> }.

Le programme Maple suivant permet d'obtenir cela.

Construction de la suite des coeff pour PovRAY

Quelques surfaces ...
restart:
S1:=81*(x^3+y^3+z^3)-189*(x^2*y+x^2*z+y^2*x+y^2*z+z^2*x+z^2*y)+54*x*y*z+126*(x*y+x*z+y*z)-9*(x^2+y^2+z^2)-9*(x+y+z)+1 :# Clebsch
S2:=64*x^3+48*x^2*z-192*y^2*x+48*y^2*z-31*z^3-54*z^2-24*z:#autre forme de Clebsch
a:=2: b:=1 : c:=5: d:=-2:
S3:=(x^2+y^2+z^2+b^2-d^2)^2 -4*((a*x-c*d)^2+b^2*y^2) :
S4 := x*(x^2-y^2)+z^2*(1.+z)+.4*x*y+.4*y*z:
S5:=-18*x^3-36*x^2*z+18*y^2*x-18*x*z^2+18*z^3-12*x^2-12*x*z-3*z^2-2*x-z:
S6:=(2*x^2+y^2+z^2-1)^3-x^2*z^3/10.-y^2*z^3:# surface de Tore Norstrand
S7:=x^4+y^4+z^4-1:# un cube arrondi
S8:=expand(z^3*(((y^2-x^2)/(2*z)+2*z^2/9+2/3)^3-6*((y^2-x^2)/(4*z)-(1/4)*(x^2+y^2+(8/9)*z^2)+2/9)^2)):#Enneper S9:=(2*x^2+y^2+z^2-1)^3-(1/10)*x^2*z^3-y^2*z^3 :# Plücker0


Povray:= proc(poly)
local S,n,ex,g,base,suite,pp,i:
S:=expand(1.*poly): # sinon pb si x^n tout seul
n:=degree(S,{x,y,z});
S:=sort(S,[x,y,z],plex):
ex:=convert(S,list):
g:=sort(normal(sum(sum(sum(x^k*y^(j)*z^(i),i=0..n-k-j),j=0..n-k),k=0..n)),[x,y,z],plex) :
base:=convert(g,list):
suite:=NULL: pp:=1:
for i from 1 to nops(base)-1 do # -1 car select(has,12,[x,y,z]) ne renvoie rien
if (pp<=nops(ex)) and (select(has,ex[pp],{x,y,z}) = base[i])
then suite:= suite,coeffs(ex[pp]): pp:=pp+1:
else suite:= suite,0: fi;
od:
suite:=evalf([suite,subs(x=0,y=0,z=0,S)],5);
suite:=convert(suite,string):
suite:= StringTools[SubstituteAll](convert(suite,string)," ",""): printf("%s",cat("poly { ", n," , <",suite[2..length(suite)-1],"> }"));
end:


Povray(S1);


poly { 3 , <81.,-189.,-189.,-9.,-189.,54.,126.,-189.,126.,-9.,81.,-189.,-9.,-189.,126.,-9.,81.,-9.,-9.,1.>  }