Школа программиста

Забыли пароль?
[задачи] [курсы] [олимпиады] [регистрация]
Логин:   Пароль:    
Скрыть меню
О школе
Правила
Олимпиады
Фотоальбом
Гостевая
Форум
Архив олимпиад
Архив задач
Состояние системы
Рейтинг
Курсы
Новичкам
Работа в системе
Алгоритмы
Курсы ККДП
Дистрибутивы
Ссылки

HotLog


 
{ геометрические алгоритмы: С какой стороны вектора лежит точка?           }
{ ------------------------------------------------------------------------ }
{ Если 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.


Красноярский краевой Дворец пионеров, (c)2006 - 2017, ICQ: 151483



Играть в слоты, игровые автоматы Grand Kazino Mr. Vegas, Mamma Mia и Gold Digger