Главная
Дисциплины (2009-2010)
Дисциплины (2010-2011)
Разное
Популярные

Геометрические алгоритмы: с какой стороны вектора лежит точка?:

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


Последнее обновление:
Copyright (C) 2009-2010 by RA0LHS
Hosted by uCoz