第16回 極座標

平面上の点の位置を記述するのに、x座標とy座標を示す直交座標系がよく使われますが、その他に、極座標系というのがあります。まず原点を決めるのは直交座標系と同じですが、原点を通る2直線ではなく、原点を端点とする半直線を1つとります。そして、点の位置を原点からの距離と、この半直線とのなす角で記述するのです。

すると、平面上の図形はrとθの方程式(極方程式)で表されることになります。

たとえば、 原点を通る直線はθ=π/3 、原点中心・半径2の円は r=2 、のように表されます。また、 A(4,π/6) を通りOAに垂直な直線の極方程式は r=4/cos(θ-π/6) となります。原点からPまでの距離がr、OPと半直線とのなす角がθですので、∠AOP= θ-π/6 です。直角三角形AOPでcosを考えてみましょう。

直交座標系では式が複雑になる曲線でも、極座標系にすれば簡単になるものがあります。直交座標系ではなかなか登場しない、螺旋、心臓形(カージオイド)、レムニスケート、正葉曲線、といったものがあります。もっとも、直交座標系でも、媒介変数表示にすればこれらのものもありますし、レムニスケートは直交座標系での微分の問題として出ることがあります。

さて、CindyScriptの関数には、極方程式で表された曲線を直接描画するものはありません。しかし、x=rcosθ , y=rsinθとすれば極座標は直交座標に変換できますので、それで描画できます。たとえば、パスカルの蝸牛線(別名リマソン)の場合、極方程式は r=acosθ+b ですから、r(θ):=3*cos(θ)+2 で関数を定義しておき(a=3, b=2 )、plot([r(#)*cos(#),r(#)*sin(#)])とすれば図が描かれます。また、先ほどあげたように、原点を通る直線では、方程式はθ=αとθだけの式なので、plot([#*cos(pi/3),#*sin(pi/3)])のようになります。しかし、このように、式ごとにplot関数の中身を書き換えるのは面倒だし、方程式の形も見えにくいではありませんか。そこで、θ、rとも媒介変数表示にすれば、plot関数はそのままで、方程式だけ定義していけばよくなり、極方程式の形も見やすくなります。

たとえば、

原点中心、半径2の円 θ(t):=t ; r(t):=2;

原点を通る直線 θ(t):=pi/3 ; r(t):=t;

A(4,pi/6) を通りOAに垂直な直線 θ(t):=t ; r(t):=4/cos(θ(t)-pi/6);

離心率と2次曲線 e=1/2; θ(t):=t; r(t):=e/(1+e*cos(θ(t)));

リマソン θ(t):=t; r(t):=2+3*cos(θ(t));

カージオイド θ(t):=t; r(t):=2*(1+cos(θ(t)));

アルキメデスの螺旋 θ(t):=t; r(t):=θ(t);

正葉曲線 θ(t):=t; r(t):=4*sin(5*θ(t));

レムニスケート θ(t):=t; r(t):=sqrt(cos(2*θ(t)));

このように関数として定義してplot関数で表示すればよいのです。plot関数で扱う実行変数は、初期状態では0から100までなので、適宜修飾子 start と stop を指定するとよいでしょう。たとえば、原点を通る直線θ(t)=pi/3 ; r(t)=t; は、そのままでは半直線になってしまいますが、start->-10,stop->10 のようにすれば r<0 の部分も表示されます。(rは原点からの距離なので正の実数ですが、極方程式に関しては負の数も許されています。)次のレムニスケートの例では、stopvalue=piとすれば半分だけ描かれることになります。

--- レムニスケートの例 ------------------------------------------------------------------

θ(t):=t;

r(t):=sqrt(cos(2*θ(t)));

startvalue=0;

stopvalue=2*pi;

plot([r(#)*cos(θ(#)),r(#)*sin(θ(#))],start->startvalue,stop->stopvalue,steps->100);

-----------------------------------------------------------------------------------------------------

注: steps->100 がないとすこし隙間が空きます。