用点制作三角形 - prolog

时间:2016-12-25 21:52:23

标签: list prolog

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

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

,输出应该是这样的:

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

1 个答案:

答案 0 :(得分: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).

您应该能够使用此谓词输出所有有效点。事实上,除非添加排序约束,否则您将获得一些重复项。但这应该让你走上正轨。