このディレクトリの索引
http://toro.2ch.net/test/read.cgi/tech/1354070278/587
#  [1] 授業単元:C言語演習 
#  [2] 問題文(含コード&リンク): 
#  演習目的 
#  々渋ぢ里筌櫂ぅ鵐燭鰺用して、データ構造を設計することができる。 
#  構造体をreturn文で返却する関数を作ることができる。 
#  ポインタを扱うことができる。 
#  課題: 
#  直交座標系の座標(x,y)を極座標系の座標(r,θ)に変換する関数と、 
#  その逆変換をする関数を作成しなさい。 
#  ただし、直交座標系(orthogonal coordinate system)の座標と、 
#  極座標系(polar coordinates system)の座標はそれぞれ構造体を 
#  用いて定義すること。 
#  {x=rcosθ,y=rsinθ 
#  {r=√(x^2+y^2),tanθ=y/x 
#  例えば、次のように定義することができる。 
#  typedef struct{ 
#  double x;  /** x座標 **/ 
#  double y;  /** y座標 **/ 
#  } orth_coord_t; 
#  

'直交座標系の座標(x,y)を極座標系の座標(r,θ)に変換する関数と その逆変換をする関数を作成しなさい。'(_x,_y,_r,_θ) :-
        \+(var(_x)),
        \+(var(_y)),
        '直交座標(x,y)から極座標(r,θ)へ変換'(_x,_y,_r,_θ) ,!.
'直交座標系の座標(x,y)を極座標系の座標(r,θ)に変換する関数と その逆変換をする関数を作成しなさい。'(_x,_y,_r,_θ) :-
        \+(var(_r)),
        \+(var(_θ)),
        '極座標(r,θ)から直交座標(x,y)へ変換'(_r,_θ,_x,_y).

'極座標(r,θ)から直交座標(x,y)へ変換'(_r,_θ,_x,_y) :-
        _x is _r * cos(_θ),
        _y is _r * sin(_θ),!.

'直交座標(x,y)から極座標(r,θ)へ変換'(_x,_y,_r,_θ) :-
        _r is sqrt(_x ^ 2 + _y ^ 2),
        _θ is atan(_y / _x),
        '直交座標(x,y)から極座標(r,θ)へ変換'(_x,_y,_θ),!.

'直交座標(x,y)から極座標(r,θ)へ変換'(_x,_y,_θ) :-
        \+(_x = 0.0),
        _θ is  atan(0.0),!.
'直交座標(x,y)から極座標(r,θ)へ変換'(0.0,_y,_θ) :-
        \+(_y = 0.0),
        _z is _x / _y,
        arccotan(_z,_θ),!.
'直交座標(x,y)から極座標(r,θ)へ変換'(0.0,0.0,0.0).

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