このディレクトリの索引
http://toro.2ch.net/test/read.cgi/tech/1354070278/841
#  お願いします。 
#   
#  [1] 授業単元: 課題 
#  [2] 問題文 
#   
#  1. 10*10(=100)の領域に、ランダムに30個の点を配置する 
#  2. ランダムに2点 A, B を選ぶ 
#  3. AからBまで、距離10以内にある点を経由し移動が可能か否か判定せよ 
#   
#  

'1. 10*10(=100)の領域に、ランダムに30個の点を配置する
2. ランダムに2点 A, B を選ぶ
3. AからBまで、距離10以内にある点を経由し移動が可能か否か判定せよ' :-
        '1. 10*10(=100)の領域に、ランダムに30個の点を配置する'(L),
        '2. ランダムに2点 A, B を選ぶ'(L,_A,_B),
        '3. AからBまで、距離10以内にある点を経由し移動が可能か否か判定せよ'(L,_A,_B).

'1. 10*10(=100)の領域に、ランダムに30個の点を配置する'(L) :-
        fidnall((_x,_y),(
                    between(1,30,_),
                    _x is (random(10000) + 1) / 1000,
                    _y is (random(10000) + 1) / 1000),
                L).

'2. ランダムに2点 A, B を選ぶ'(L,_A,_B) :-
        ランダムに点を選ぶ(L,_A),
        ランダムに点を選ぶ(L,_B),
        \+(_A = _B),!.
'2. ランダムに2点 A, B を選ぶ'(L,_A,_B) :-
        '2. ランダムに2点 A, B を選ぶ'(L,_A,_B).

ランダムに点を選ぶ(L,_点) :-
        R is random(30),
        nth0(R,L,_点).

'3. AからBまで、距離10以内にある点を経由し移動が可能か否か判定せよ'(L,(_x1,_y1),(_x2,_y2)) :-
        距離10以内にある点を経由し移動可能(L,(_x,_y),(_x1,_y1),(_x2,_y2)),
        writef('点(%t,%t)で可能です\n',[_x,_y]).
'3. AからBまで、距離10以内にある点を経由し移動が可能か否か判定せよ'(_,_,_) :-
        write('可能な点はありません\n').

距離10以内にある点を経由し移動可能(L,(_x,_y),(_x1,_y1),(_x2,_y2)) :-
        経由する点候補を得る(L,(_x,_y),(_x1,_y1),(_x2,_y2)),
        距離10以内にある((_x,_y),(_x1,_y1),(_x2,_y2)).

経由する点候補を得る(L,(_x,_y),(_x1,_y1),(_x2,_y2)) :-
        member((_x,_y),L),
        \+((_x,_y)=(_x1,_y1)),
        \+((_x,_y)=(_X2,_y2)).

距離10以内にある((_x,_y),(_x1,_y1),(_x2,_y2)) :-
        sqrt((_x - _x1) * (_x - _x1) + (_y - _y1) * (_y - _y1)) + sqrt((_x - _x2) * (_x - _x2) + (_y - _y2) * (_y - _y21)) =< 10.0.