Ответ в теме: База данных точек. Выбрать точки снаружи параболы

      Комментарии к записи Ответ в теме: База данных точек. Выбрать точки снаружи параболы отключены
#1901

Я думаю надо выразить из вашего уравнения координату X для проверки принадлежности точки «внутренней области». Выбираете точку из БД — проверяете ее примерно так:

parabola_get_x(Y, _P, _X):-
  Y < 0, !, fail.
parabola_get_x(Y, P, X):-
  X is sqrt(2 * P * Y).
 
check_internal(X, Y, P):-
  !, parabola_get_x(Y, P, ParabolaX), abs(X) < ParabolaX.

В твоем уравнении парабола не смещена, поэтому Y точек внутри параболы всегда больше нуля. Это учитывает правило parabola_get_x, возвращающее координату X по координате Y.
Каждой координате Y у точек, расположенных выше горизонтальной оси, соответствует 2 координаты X, но т.к. твоя парабола не смещена — точки симметричны. Поэтому правило parabola_get_x возвращает только одну точку с положительным значением X.

Правило check_internal принимает пару координат и вычисляет координаты точки параболы, соответствующие заданному значению Y. Полученный результат сравнивается с исходной точкой, а т.к. мы брали только одну точку (правее вертикальной оси) — то используем модуль значения X исходной координаты.

В официальной документации по library(record) как раз описан пример с базой точек.