円弧描画マクロ(中)

 円盤による円弧を描画するマクロの中間部分です。
 //----------------------------------------------------------------------------------
  #local Clipped_type=0;
  
  #if(Vz1!=Pz1 & Vz2!=Pz2)
   #local A=2*(Px2-Px1)*(Px1-Ox0)+2*(Pz2-Pz1)*(Pz1-Oz0);
   #local B=2*(Pz1-Pz2)*(Px1*Oz0-Pz1*Ox0);
   #local C=(Px1-Ox0)*(pow(Px1,2)-pow(Px2,2)+pow(Pz1,2)-pow(Pz2,2));
   #local Ox = (B-C)/A; // center x
   #local Oz = ( (Pz1-Oz0)/(Px1-Ox0) )*(Ox-Px1)+Pz1; // center z
   #local Tr=sqrt(pow(Px2-Ox,2)+pow(Pz2-Oz,2)); // radius r
  
   #local Mc=Px1-Ox; #local Ms=Pz1-Oz;
   #if(Mc!=0) #local Mtan=Ms/Mc; #else #local Mtan=tan(pi/2); #end
   #local Vxv=(pow(Mtan,2)*Px2+Mtan*(Pz1-Pz2)+Px1)/(pow(Mtan,2)+1);
   #local Vzv=(pow(Mtan,2)*Pz1+Mtan*(Px1-Px2)+Pz2)/(pow(Mtan,2)+1);
   #local Vs=Vzv-Pz1; #local Vc=-(Vxv-Px1);
  
   #if(Mc!=0)
   #if(Mc*Vs>0) #local Clipped_type=1; #end
   #if(Mc*Vs<0) #local Clipped_type=2; #end
   #else
   #if(Ms*Vc>0) #local Clipped_type=1; #end
   #if(Ms*Vc<0) #local Clipped_type=2; #end
   #end
  #end
 //----------------------------------------------------------------------------------
 円の中心座標と半径を算出し、円から円弧を切り取るための種別も算出しています。