Пролог геометрических правил треугольника - PullRequest
0 голосов
/ 17 октября 2018

Какие-нибудь примеры того, как создать правила в прологе для равностороннего и равнобедренного треугольника в 2-й точке?

Начните с этих:

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

1 Ответ

0 голосов
/ 17 октября 2018

Чтобы проверить, является ли треугольник равносторонним, это довольно просто.Чтобы проверить, является ли это равнобедренным, это немного менее тривиально.Вот мое решение:

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, который удаляет дубликаты из списка.Если два списка имеют одинаковую длину, это означает, что все три стороны различны, и поэтому треугольник не равнобедренный.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...