極座標からデカルト座標への変換は定義通りに実装すれば簡単にできますが、逆は少し厄介です。偏角θ(点(X,Y)がX軸と為す角度)の計算が面倒だからです。
偏角
基本的には、 ARCTAN
関数で偏角を求めます。 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を戻す
もし
など、もっと他の区間で結果を求めたい場合は、適宜改造して使って下さい。
極座標変換
これで一番ネックとなっていた偏角を計算する問題が解決したので、デカルト座標から極座標への変換も簡単です:
# 「100,200をR,θへ極座標変換」と使う
●極座標変換(X,Yを{参照渡し}R,{参照渡し}θへ|θに)
R=HYPOT(X,Y)。# = √(X^2+Y^2)
θ=X,Yの偏角
但し、当然ですが「偏角」命令を利用するので、同じプログラム内に上で作った「偏角」命令の定義がないといけません。偏角を求める関数は2種類作りましたが、好きな方(だけ)を使って下さい。