2016-12-25 76 views
-1

我有5点坐标,我想写一个程序,显示可以用这些三角形。 例如:带点的三角形 - 序言

  • P1(2,1)
  • P2(4,2)
  • P3(4,1)
  • P4(5,1)
  • P5( 6,3)

和输出应该是这样的:

  • P1,P2,P3
  • P3,P4,P5
  • ...
+0

请参考[旅游](http://stackoverflow.com/tour)。 –

+0

我错了什么? –

+0

@hessamsalehi *“我错了什么?”*您没有发布任何代码,也没有要求停顿。 –

回答

0

所以,天真,三分不创建一个三角形的唯一途径是,如果他们在一条直线上。在你的情况下,这将是他们共享相同的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). 

你应该能够使用此谓词输出所有有效的点。实际上你会得到一些重复,除非你添加一个排序约束。但这应该让你走上正轨。