このディレクトリの索引
http://pc12.2ch.net/test/read.cgi/tech/1269438098/856
#  [1] 授業単元: プログラム演習  
#  [2] 問題文(含コード&リンク): 三角形の三つの辺の長さを引数とし、内角の大きさを返す関数を実装しなさい。 
#  さらに、その関数を用いて、三角形の三つの点の座標(x座標, y座標)を入力し、それらの点が作る三角形のすべての内角の角度を計算するプログラムを実装しなさい。 
#  計算結果の角度の表示は必ずmain()関数の中で行われなければならないとする。  
#  

三角形の角度(_辺1,_辺2,_辺3,_辺1の対角の角度,_辺2の対角の角度,_辺3の対角の角度) :-
        辺の対角(_辺1,_辺2,_辺3,_辺1の対角の角度),
        辺の対角(_辺2,_辺1,_辺3,_辺2の対角の角度),
        辺の対角(_辺3,_辺2,_辺1,_辺3の対角の角度).
        
三角形の面積(_辺1,_辺2,_辺3,_面積) :-
        S1 is (_辺1+_辺2+_辺3) / 2,
        _面積 is sqrt(S1 * (S1 - _辺1) * (S1 - _辺2) * (S1 - _辺3)).

三角形の高さ(_辺1,_辺1,_辺2,_辺3,_高さ) :-
        三角形の面積(_辺1,_辺2,_辺3,_三角形の面積),
        _高さ is _三角形の面積 / _辺1 * 2.

辺の対角(_辺,_辺2,_辺3,_対角) :-
        三角形の面積(_辺,_辺2,_辺3,_三角形の面積),
        _高さ is _三角形の面積 / _辺 * 2,
        _ラジアン角1 is acos(_高さ / _辺2),
        _ラジアン角2 is acos(_高さ / _辺3),
        辺の対角(_辺,_辺2,_辺3,_高さ,_ラジアン角1,_ラジアン角2,_対角). 

辺の対角(_辺,_辺2,_辺3,_高さ,_ラジアン角1,_ラジアン角2,_対角) :-
        (_辺2 ^ 2 - _高さ ^ 2) =< (_辺 ^ 2), 
        (_辺3 ^ 2 - _高さ ^ 2) =< (_辺 ^ 2),
        _対角 is 180 * (_ラジアン角1 + _ラジアン角2) / pi.
辺の対角(_辺,_辺2,_辺3,_高さ,_ラジアン角1,_ラジアン角2,_対角) :-
        (_辺2 ^ 2 - _高さ ^ 2) > (_辺 ^ 2), 
        _対角 is 180 * (_ラジアン角1 - _ラジアン角2) / pi.
辺の対角(_辺,_辺2,_辺3,_高さ,_ラジアン角1,_ラジアン角2,_対角) :-
        (_辺3 ^ 2 - _高さ ^ 2) > (_辺 ^ 2), 
        _対角 is 180 * (_ラジアン角2 - _ラジアン角1) / pi.

/*
cos(_ラジアン角,_cos値) :-
        var(_ラジアン角),
        findall([C,E],(for(0,D,100) , E is (D * pi / 100) / 2, C is abs(_cos値 - cos(E))),L),
        min(L,[_,_ラジアン角]),!.
cos(_ラジアン角,_cos値) :-
        \+(var(_ラジアン角)),
        _cos値 is cos(_ラジアン角),!.
*/