直交座標を球面座標に変換します。
//****************************************************************
入力 Pv:曲線上の動点の直交座標 <x座標,y座標,z座標>
出力 Sv;曲線上の動点の球面座標 <動径,水平角,垂直角>
//****************************************************************
#macro Spherical_cnv_y(Pv)
#local RR=vlength(Pv); #local Rh=vlength(< Pv.x, 0, Pv.z >);
#if(Pv.x=0 & Pv.z=0) #local HH=0; #else #local HH=atan2(Pv.z,Pv.x); #end
#if(Rh=0 & Pv.y=0) #local VV=0; #else #local VV=atan2(Pv.y,Rh); #end
< RR, HH, VV >
#end
//****************************************************************
刻み幅の位置に配置する曲線上の動点を直交座標として求めます。
//****************************************************************
入力
Sv0:中心曲線に直交するようにするための球面座標
Pv0:中心曲線の刻み幅の位置における動点の直交座標
Pv :中間の曲線の比例位置における直交座標
出力
Vp :中間の曲線上における動点の直交座標 Pv0+Pv
//****************************************************************
#macro Point_cnv(Sv0,Pv0,Pv)
#local Pv=vrotate(Pv,<0,degrees(Sv0.y),0>);
#local Pv=vrotate(vrotate(Pv,<0,0,degrees(Sv0.z)>),<0,-degrees(Sv0.y),0>);
Pv0+Pv
#end
//****************************************************************
曲線間を三角形の面で接続して曲面を造ります。
//****************************************************************
入力
V1:媒介変数u <始点,終点,刻み幅>
V2:媒介変数v <始点,終点,刻み幅>
Fn:中心曲線の式の登録番号(Fn+1:開始曲線 Fn+2:終了曲線)
//****************************************************************
#macro Scan_surfacef3(V1,V2,Fn)
#local Section_sf=Fn+1; #local Section_ef=Fn+2;
#local P1=Line_function(V2.x, Fn);
#local P2=Line_function(V2.x+V2.z,Fn);
#local Pv=Spherical_cnv_y(P2-P1); #local S1=
#local Tp=V2.x; #while( Tp < V2.y )
#local P3=Line_function(Tp+2*V2.z,Fn);
#local Pv=Spherical_cnv_y(P3-P2); #local S2=< Pv.x, Pv.y, Pv.z-pi/2 >;
#local Sp=V1.x; #while(Sp
#local Sp=Sp+V1.z; #end
#local Tp=Tp+V2.z; #local P1=P2; #local P2=P3; #local S1=S2; #end
#end
//****************************************************************