6)曲面の法ベクトル

  スムーズな曲面を生成するために、曲面の座標とその位置の外向き法ベクトルを求めます。
 //**********************************************************************************
   入力 U :第一変数の値 V :第二変数の値 Fn:式の登録番号
   出力 N :配列NのN[0]には曲面の座標、N[1]には外向き法ベクトル
 //**********************************************************************************
  #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
 //**********************************************************************************