Ответ в теме: Угол между прямыми на Prolog

      Комментарии к записи Ответ в теме: Угол между прямыми на Prolog отключены
#2379

Одним из вариантов решения проблемы на Visual Prolog может быть получение синуса угла по значению его косинуса с помощью известной формулы, затем вычисления тангенса угла как отношения синуса к косинусу. После этого можно применить имеющуюся в Visual Prolog функцию arctan для вычисления угла. При этом необходимо учитывать, что при вычислении тангенса может возникнуть деление на ноль (при нулевом косинусе) — такую ситуацию необходимо отдельно обработать, вернув в качестве угла — 90 градусов:

angle(equation(A1, B1, _C1), equation(A2, B2, _C2), Angle):-
  	CosAngle = (A1*A2 + B1*B2) / (sqrt(A1*A1 + B1*B1) * sqrt(A2*A2 + B2*B2)),
  	NOT(CosAngle = 0), !,
  	SinAngle = sqrt(1 - CosAngle*CosAngle),
  	TgAngle = SinAngle / CosAngle,
  	AngleRad = arctan(TgAngle),
  	Angle = abs(57.2958 * AngleRad);
  	Angle = 90.

Очевидно, это не самое красивое решение — может быть более правильно реализовать самостоятельно функцию вычисления арккосинуса.