|
|
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. 07.08.2014 - Breakpoint - точка остановки 07.08.2014 - Топ-10 самых популярных приложений в Facebook 18.11.2013 - Панель управления и персонализация системы. Windows Vista 18.11.2013 - Логические и физические диски. Windows Vista 18.11.2013 - Удаление файлов и папок 01.11.2013 - Программирование дисковых подсистем: возможности 31.10.2013 - Windows8 или Windows7? 31.10.2013 - Windows8, игры |
|
Non-commercial fansite
|