このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1312201995/87
#  [1] 授業単元:C言語演習  
#  [2] 問題文(含コード&リンク):  
#  直交座標系の座標(x,y)を極座標系の座標(r,θ)に変換する関数と、  
#  その逆変換をする関数を作成しなさい。  
#  ただし、直交座標系(orthogonal coordinate system)の座標と、  
#  極座標系(polar coordinates system)の座標はそれぞれ構造体を  
#  用いて定義すること。  
#  {x=rcosθ,y=rsinθ  
#  {r=√(x^2+y^2),tanθ=y/x  
#  上の演習を前スレ../test/read.cgi/tech/1312201995/409で 
#  http://ime.nu/codepad.org/ncFr1HSH 
#  のように作っていただいたのですが、実行時に直交座標系を入力し、 
#  極座標系の座標(r,θ)変換した出力と、その逆変換の出力ができる 
#  プログラムを自力で付け加え作成することができませんでした。 
#  大変申し訳ないのですが、どなたか実行結果が出るプログラムを作成お願いします。 
#  

極座標系直交座標系変換(_r,_角度,X,Y) :-
        \+(var(_r)),
        \+(var(_角度)),
        X is _r * sin(_角度),
        Y is _r * cos(_角度).
極座標系直交座標系変換(_r,_角度,X,Y) :-
        var(_r),
        var(_角度),
        _r is abs(sqrt(X * X + Y * Y)),
        _角度 is atan(Y / X).
極座標系直交座標系変換(_r,0,X,Y) :-
        var(_r),
        var(_角度),
        (X = 0;X = 0.0),
        (Y = 0;Y = 0.0),
        _r is abs(sqrt(X * X + Y * Y)),
        _角度 is atan(Y / X).
極座標系直交座標系変換(_r,0,X,Y) :-
        var(_r),
        var(_角度),
        (X = 0;X = 0.0),
        \+(Y = 0),
        \+(Y = 0.0),
        _r is abs(sqrt(X * X + Y * Y)),
        arccotan(X/Y,_角度).

arccotan(X,Y) :-
        Z is X,
        Y is atan(Z) + 2 * atan(1).