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

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

Для вычисления угла между прямыми, заданными общими уравнениями можно применить формулу, приведенную на рисунке (она достаточно легко выводится если нарисовать прямые на бумаге).

На SWI Prolog решение может выглядеть следующим образом:

radian_to_degree(Radian, Degree):-
  Degree is Radian * 180 / 3.1415926535.
  
angle(equation(A1, B1, _C1), equation(A2, B2, _C2), Angle):-
  CosAngle is (A1*A2 + B1*B2) / (sqrt(A1*A1 + B1*B1) * sqrt(A2*A2 + B2*B2)),
  AngleRad is acos(CosAngle),
  radian_to_degree(AngleRad, Angle).

По формуле вычисляется значение косинуса угла, чтобы получить значение угла необходимо вычислить арккосинус. При этом угол будет получен в радианах, для перевода результата в градусы используется вспомогательная функция radian_to_degree.

Вложения: