This comment is reply for 1062 JDO: おおぉ、、、お題の内容を超えて、全開検索...(長方形の交差判定). Go to thread root.
katsu #1069(2007/07/18 13:34 GMT) [ Prolog ] Rating1/1=1.00
いや、全解探索でもしないと、実質overlap/2の一行で終わっちゃってつまらないから。 全解探索なら、findall/3を使えば良いんだけど、結果が冗長なので、フィルタする必要があって、それも作ってみたので、お目汚しですが。
1 2 3 4 5 6 7 8 9 10 11 12 13
%矩形の列挙 rectangle(rect1,rect(0,0,50,50)). rectangle(rect2,rect(25,25,75,75)). rectangle(rect3,rect(50,50,100,100)). %オーバーラップしているか判定 overlap(rect(L1,T1,R1,B1),rect(L2,T2,R2,B2)) :-T1 < B2, T2 < B1, L1 < R2, L2 < R1. %解を探索 testOl(pair(N1,N2)) :- rectangle(N1, R1),rectangle(N2, R2), N1 \== N2, overlap(R1,R2). %解の重複削除 uniq([],[]). uniq([A|As],[A|As2]):-A=pair(N1,N2),uniq(As,As3), delete(As3,pair(N2,N1),As2). %全解探索&重複削除 :-findall(X,testOl(X),Xs), uniq(Xs,Xss),writeln(Xss).
Rating1/1=1.00-0+
[ reply ]
katsu
#1069()
[
Prolog
]
Rating1/1=1.00
Rating1/1=1.00-0+