{ геометрические алгоритмы: С какой стороны вектора лежит точка? }
{ ------------------------------------------------------------------------ }
{ Если vector(a) и vector(b) - вектора a и b соответственно, то: }
{ }
{ vector(a)*vector(b) = ax*by - ay*bx = a*b*sin(beta-alfa) }
{ ax,ay,bx,by - координаты концов векторов }
{ a - длина вектора a }
{ b - длина вектора b }
{ alfa - угол альфа для вектора a }
{ beta - угол бета для вектора b }
{ }
{ Вывод: при общей начальной точке двух векторов их векторное произведение }
{ больше нуля, если второй вектор направлен влево от первого, }
{ и меньше нуля, если вправо. }
{ }
{ Если известны две точки, то вектор, основанный на них можно получить }
{ вычитанием двух векторов направленных из начала координат: }
{ Например, есть точка A и точка B }
{ вектор|AB| = Вектор|B| - Вектор|A|, иным словом AB_x = Bx-Ax, AB_y= By-Ay}
{ }
{ Таким образом, получается: }
{ Если есть вектор |AB|, заданный координатами ax,ay,bx,by и точка px,py, }
{ то для того чтобы узнать лежит ли она слева или справа, надо узнать знак }
{ произведения: }
{ (bx-ax)*(py-ay)-(by-ay)*(px-ax) }
{ ------------------------------------------------------------------------ }
var i: integer;
Function WherePoint(ax, ay, bx, by, px, py: real): integer;
var s: real;
begin
s := (bx - ax) * (py - ay) - (by - ay) * (px - ax);
if s > 0 then WherePoint := 1
else if s < 0 then WherePoint := -1
else WherePoint := 0;
end;
Begin { Тело основной программы }
i := WherePoint(1, 1, 8, 8, 2, 5);
if i > 0 then writeln('Точка слева от вектора')
else if i < 0 then writeln('Точка справа от вектора')
else writeln('На векторе, прямо по вектору или сзади вектора');
End.