sample035.PAS

{* Положение точки относительно вектора *}

Unit SAMPLE035;
Interface
Implementation
Begin
 writeln('Положение точки относительно вектора');
End.

Program pas;

Uses sample035.pas; {* Эту строку можно удалить *}
{ геометрические алгоритмы: С какой стороны вектора лежит точка?           }
{ ------------------------------------------------------------------------ }
{ Если 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 : real);
ay                                                                                      : real);
bx                                                                                      : real);
by                                                                                      : real);
px                                                                                      : real);
py                                                                                      : real);
Var {* В работе нам потребуются переменные: *}
  s : real;
Begin
  s := (bx - ax) * (py - ay) - (by - ay) * (px - ax);
  If s > 0 Then
    WherePoint := 1
  Else If s 0 Then
    writeln('точка слева от вектора')
  Else If i < 0 Then
    writeln('точка справа от вектора')
  Else writeln('на векторе, прямо по вектору или сзади вектора');
End.