曲面の位置と法線ベクトル

 曲面の位置と外向きの法線ベクトルを求めます。
 //**********************************************************************************
  #macro Nvector(U,V,Fn)
   #local N=array[2]
   #local P=Surface_function(U,V,Fn);
   #local H=1e-4;
   #local Fu=Surface_function( U+H/2, V, Fn)-Surface_function( U-H/2, V, Fn);
   #local Fv=Surface_function( U, V+H/2, Fn)-Surface_function( U, V-H/2, Fn);
   #local Nv=vcross(Fu/H,Fv/H);
   #if(vdot(-P,Nv)>=0) #local Sg=1; #else #local Sg=-1; #end
   #local Vn=-Sg*Nv; #if(vlength(Vn)=0) #local Vn=<0,0,1>; #end
   #local N[0]=P; #local N[1]=Vn;
   N
  #end
 //**********************************************************************************