-1
我有5點座標,我想寫一個程序,顯示可以用這些三角形。 例如:帶點的三角形 - 序言
- P1(2,1)
- P2(4,2)
- P3(4,1)
- P4(5,1)
- P5( 6,3)
和輸出應該是這樣的:
點
- P1,P2,P3
- P3,P4,P5
- ...
我有5點座標,我想寫一個程序,顯示可以用這些三角形。 例如:帶點的三角形 - 序言
- P1(2,1)
- P2(4,2)
- P3(4,1)
- P4(5,1)
- P5( 6,3)
和輸出應該是這樣的:
點
- P1,P2,P3
- P3,P4,P5
- ...
所以,天真,三分不創建一個三角形的唯一途徑是,如果他們在一條直線上。在你的情況下,這將是他們共享相同的X或Y值時。所以讓我們抓住三點,看看它們中至少有兩個是不同的;如果是這樣的話,它應該是一個三角形。
由於您的事實數據庫結構嚴重不全,因此您的操作複雜化。事實上,我不打算使用它在所有的,我要做出我自己的靈感來自於它:
point(p1, 2,1).
point(p2, 4,2).
point(p3, 4,1).
point(p4, 5,1).
point(p5, 6,3).
現在讓我們做謂語:
triangle(P1, P2, P3) :-
point(P1, X1, Y1), point(P2, X2, Y2), point(P3, X3, Y3),
% first, make sure we have three different points
dif(P1, P2), dif(P2, P3), dif(P1, P3),
% now, ensure that all three of the Ys and all three of the Xs are not equal
\+ (X1 == X2, X2 == X3, X1 == X3),
\+ (Y1 == Y2, Y2 == Y3, Y1 == Y3).
你應該能夠使用此謂詞輸出所有有效的點。實際上你會得到一些重複,除非你添加一個排序約束。但這應該讓你走上正軌。
請參考[旅遊](http://stackoverflow.com/tour)。 –
我錯了什麼? –
@hessamsalehi *「我錯了什麼?」*您沒有發佈任何代碼,也沒有要求停頓。 –