極座標(r,θ)は、通常の座標(デカルト座標・正規直交座標)と違い、放射状・同心円状に軸が伸びている感じの座標系です。極座標とデカルト座標との関係は次のようになっています:
# 「1,PIをX,Yへデカルト座標変換」のように使う ●デカルト座標変換(R,θを{参照渡し}X,{参照渡し}Yに|Yへ) X = R * COS(θ) Y = R * SIN(θ)
一部の特殊な図形などは、極座標系で表現した方が分かりやすいことも多いです。例えば、半径 a で原点中心の円は、方程式 で表されます。
極座標(r,θ)は、通常の座標(デカルト座標・正規直交座標)と違い、放射状・同心円状に軸が伸びている感じの座標系です。極座標とデカルト座標との関係は次のようになっています:
# 「1,PIをX,Yへデカルト座標変換」のように使う ●デカルト座標変換(R,θを{参照渡し}X,{参照渡し}Yに|Yへ) X = R * COS(θ) Y = R * SIN(θ)
一部の特殊な図形などは、極座標系で表現した方が分かりやすいことも多いです。例えば、半径 a で原点中心の円は、方程式 で表されます。
極座標からデカルト座標への変換は定義通りに実装すれば簡単にできますが、逆は少し厄介です。偏角θ(点(X,Y)がX軸と為す角度)の計算が面倒だからです。
基本的には、 ARCTAN
関数[*1]で偏角を求めます。 X>0 のときは ARCTAN(Y/X)
で OK です。しかし、 ARCTAN
では求めたい偏角が
のとき、つまり X=0 のときに対応できません(ゼロ除になるため)。また、X<0のときも(πだけずれた)真逆の角度になってしまいます。
そのため、とにかく細かく条件分岐して実装します:
!HALF_PIとは数値=PI/2 ●偏角(X,Yの) もしXが0ならば もしY>0ならば HALF_PIを戻す 違えば # もしY≦0ならば -HALF_PIを戻す 違えば、もしX>0ならば ARCTAN(Y/X)を戻す 違えば # もしX<0ならば ARCTAN(Y/X)+PIを戻す
この関数の値域(結果の範囲)は、 と、少しトリッキーです。計算上はこれで問題ないですが、より一般的な偏角の区間 に収めたい場合は、もう一段階場合分けを増やす必要があります:
!HALF_PIとは数値=PI/2 ●偏角(X,Yの) もしXが0ならば もしY>0ならば HALF_PIを戻す 違えば # もしY≦0ならば -HALF_PIを戻す 違えば、もしX>0ならば ARCTAN(Y/X)を戻す 違えば # もしX<0ならば もし、Y>0ならば ARCTAN(Y/X)+PIを戻す 違えば # もしY≦0ならば ARCTAN(Y/X)-PIを戻す
もし など、もっと他の区間で結果を求めたい場合は、適宜改造して使って下さい[*2]。
これで一番ネックとなっていた偏角を計算する問題が解決したので、デカルト座標から極座標への変換も簡単です:
# 「100,200をR,θへ極座標変換」と使う ●極座標変換(X,Yを{参照渡し}R,{参照渡し}θへ|θに) R=HYPOT(X,Y)。# = √(X^2+Y^2) θ=X,Yの偏角
但し、当然ですが「偏角」命令を利用するので、同じプログラム内に上で作った「偏角」命令の定義がないといけません[*3]。偏角を求める関数は2種類作りましたが、好きな方(だけ)を使って下さい。