Prolog几何三角规则

时间:2018-10-17 16:53:35

标签: prolog

有什么例子可以为二维点的等边三角形和等腰三角形的序言创建规则?

从这些开始:

equilateral(point2d(x,y), point2d(x,y), point2d(x,y))
isosceles(point2d(x,y), point2d(x,y), point2d(x,y))

1 个答案:

答案 0 :(得分:1)

要检查三角形是否等边,非常简单。要检查它是否为等腰,它的琐碎性要小一些。这是我的解决方案:

seg_length(X1,Y1,X2,Y2,D):-
    D is sqrt(((X2-X1)**2)+((Y2-Y1)**2)).

equilateral(point2d(X1,Y1), point2d(X2,Y2), point2d(X3,Y3)):-
    seg_length(X1,Y1,X2,Y2,D),
    seg_length(X2,Y2,X3,Y3,D),
    seg_length(X3,Y3,X1,Y1,D).

isosceles(point2d(X1,Y1), point2d(X2,Y2), point2d(X3,Y3)):-
    seg_length(X1,Y1,X2,Y2,D1),
    seg_length(X2,Y2,X3,Y3,D2),
    seg_length(X3,Y3,X1,Y1,D3),
    L = [D1,D2,D3],
    sort(L,LS),
    length(L,LenL),
    length(LS,LenLS),
    LenL \== LenLS.

要检查至少两个边是否相等,我使用sort/2从列表中删除重复项。如果两个列表的长度相同,则表示所有三个边都不相同,因此三角形不是等腰。