Принадлежность точки из уравнения прямой

Уравнение прямой, виды уравнения прямой на плоскости

В прошлом материале мы рассмотрели основные моменты, касающиеся темы прямой на плоскости. Теперь же перейдем к изучению уравнения прямой: рассмотрим, какое уравнение может называться уравнением прямой, а также то, какой вид имеет уравнение прямой на плоскости.

Определение уравнения прямой на плоскости

Допустим, что есть прямая линия, которая задана в прямоугольной декартовой системе координат O х у .

Прямая линия – это геометрическая фигура, которая состоит из точек. Каждая точка имеет свои координаты по осям абсцисс и ординат. Уравнение, которое описывает зависимость координат каждой точки прямой в декартовой системе O x y , называется уравнением прямой на плоскости.

Фактически, уравнение прямой на плоскости – это уравнение с двумя переменными, которые обозначаются как x и y . Уравнение обращается в тождество при подстановке в него значений любой из точек прямой линии.

Давайте посмотрим, какой вид будет иметь уравнение прямой на плоскости. Этому будет посвящен весь следующий раздел нашей статьи. Отметим, что существует несколько вариантов записи уравнения прямой. Объясняется это наличием нескольких способов задания прямой линии на плоскости, и также различной спецификой задач.

Общее уравнение прямой линии

Познакомимся с теоремой, которая задает вид уравнения прямой линии на плоскости в декартовой системе координат O x y .

Уравнение вида A x + B y + C = 0 , где x и y – переменные, а А , В и C – это некоторые действительные числа, из которых A и B не равны нулю, задает прямую линию в декартовой системе координат O x y . В свою очередь, любая прямая линия на плоскости может быть задана уравнением вида A x + B y + C = 0 .

Таким образом, общее уравнение прямой на плоскости имеет вид A x + B y + C = 0 .

Поясним некоторые важные аспекты темы.

Посмотрите на рисунок.

Линия на чертеже определяется уравнением вида 2 x + 3 y — 2 = 0 , так как координаты любой точки, составляющей эту прямую, удовлетворяют приведенному уравнению. В то же время, определенное количество точек плоскости, определяемых уравнением 2 x + 3 y — 2 = 0 , дают нам прямую линию, которую мы видим на рисунке.

Общее уравнение прямой может быть полным и неполным. В полном уравнении все числа А , В и C отличны от нуля. Во всех остальных случаях уравнение считается неполным. Уравнение вида A x + B y = 0 определяет прямую линию, которая проходит через начало координат. Если A равно нулю, то уравнение A x + B y + C = 0 задает прямую, расположенную параллельно оси абсцисс O x . Если B равно нулю, то линия параллельна оси ординат O y .

Вывод: при некотором наборе значений чисел А , В и C с помощью общего уравнения прямой можно записать любую прямую линию на плоскости в прямоугольной системе координат O х у .

Прямая, заданная уравнением вида A x + B y + C = 0 , имеет нормальный вектор прямой с координатами A , B .

Все приведенные уравнения прямых, которые мы рассмотрим ниже, могут быть получены из общего уравнения прямой. Также возможен и обратный процесс, когда любое из рассматриваемых уравнений может быть приведено к общему уравнению прямой.

Разобраться во всех нюансах темы можно в статье «Общее уравнение прямой». В материале мы приводим доказательство теоремы с графическими иллюстрациями и подробным разбором примеров. Особое внимание в статье уделяется переходам от общего уравнения прямой к уравнениям других видов и обратно.

Уравнение прямой в отрезках

Уравнение прямой в отрезках имеет вид x a + y b = 1 , где a и b – это некоторые действительные числа, которые не равны нулю. Абсолютные величины чисел a и b равны длине отрезков, которые отсекаются прямой линией на осях координат. Длина отрезков отсчитывается от начала координат.

Благодаря уравнению можно легко построить прямую линию на чертеже. Для этого необходимо отметить в прямоугольной системе координат точки a , 0 и 0 , b , а затем соединить их прямой линией.

Построим прямую, которая задана формулой x 3 + y — 5 2 = 1 . Отмечаем на графике две точки 3 , 0 , 0 , — 5 2 , соединяем их между собой.

Дополнительно рекомендуем ознакомиться с материалом, изложенным в статье «Уравнение прямой в отрезках».

Уравнение прямой с угловым коэффициентом

Эти уравнения, имеющие вид y = k · x + b должны быть нам хорошо известны из курса алгебры. Здесь x и y – это переменные, k и b – это некоторые действительные числа, из которых k представляет собой угловой коэффициент. В этих уравнениях переменная у является функцией аргумента x .

Дадим определение углового коэффициента через определение угла наклона прямой к положительному направлению оси O x .

Для обозначения угла наклона прямой к положительному направлению оси O x в декартовой системе координат введем величину угла α . Угол отсчитывается от положительного направления оси абсцисс до прямой линии против хода часовой стрелки. Угол α считается равным нулю в том случае, если линия параллельна оси O x или совпадает с ней.

Угловой коэффициент прямой – это тангенс угла наклона этой прямой. Записывается это следующим образом k = t g α . Для прямой, которая располагается параллельно оси O y или совпадает с ней, записать уравнение прямой с угловым коэффициентом не представляется возможным, так как угловой коэффициент в этом случае превращается в бесконечность (не существует).

Прямая, которая задана уравнением y = k · x + b , проходит через точку 0 , b на оси ординат. Это значит, что уравнение прямой с угловым коэффициентом y = k · x + b , задает на плоскости прямую линию, которая проходит через точку 0 , b и образует угол α с положительным направлением оси O x , причем k = t g α .

Изобразим прямую линию, которая определяется уравнением вида y = 3 · x — 1 .

Эта линия должна пройти через точку ( 0 , — 1 ) . Угол наклона α = a r c t g 3 = π 3 равен 60 градусов к положительному направлению оси O x . Угловой коэффициент равен 3

Обращаем ваше внимание, что с помощью уравнения прямой с угловым коэффициентом очень удобно искать уравнение касательной к графику функции в точке.

Больше материала по теме можно найти в статье «Уравнение прямой с угловым коэффициентом». Помимо теории там размещено большое количество графических примеров и подробный разбор задач.

Каноническое уравнение прямой на плоскости

Данный вид уравнения имеет вид x — x 1 a x = y — y 1 a y , где x 1 , y 1 , a x , a y — это некоторые действительные числа, из которых a x и a y не равны нулю.

Прямая линия, заданная каноническим уравнением прямой, проходит через точку M 1 ( x 1 , y 1 ) . Числа a x и a y в знаменателях дробей представляют собой координаты направляющего вектора прямой линии. Это значит, что каноническое уравнение прямой линии x — x 1 a x = y — y 1 a y в декартовой системе координат O x y соответствует линии, проходящей через точку M 1 ( x 1 , y 1 ) и имеющей направляющий вектор a → = ( a x , a y ) .

Изобразим в системе координат O x y прямую линию, которая задается уравнением x — 2 3 = y — 3 1 . Точка M 1 ( 2 , 3 ) принадлежит прямой, вектор a → ( 3 , 1 ) является направляющим вектором этой прямой линии.

Каноническое уравнение прямой линии вида x — x 1 a x = y — y 1 a y может быть использовано в случаях, когда a x или a y равно нулю. Наличие ноля в знаменателе делает запись x — x 1 a x = y — y 1 a y условной. Уравнение можно записать следующим образом a y ( x — x 1 ) = a x ( y — y 1 ) .

В том случае, когда a x = 0 , каноническое уравнение прямой принимает вид x — x 1 0 = y — y 1 a y и задает прямую линию, которая расположена параллельно оси ординат или совпадает с этой осью.

Каноническое уравнение прямой при условии, что a y = 0 , принимает вид x — x 1 a x = y — y 1 0 . Такое уравнение задает прямую линию, расположенную параллельно оси абсцисс или совпадающую с ней.

Больше материала на тему канонического уравнения прямой смотрите здесь. В статье мы приводим целый ряд решений задач, а также многочисленные примеры, которые позволяют лучше овладеть темой.

Параметрические уравнения прямой на плоскости

Данные уравнения имеют вид x = x 1 + a x · λ y = y 1 + a y · λ , где x 1 , y 1 , a x , a y — это некоторые действительные числа, из которых a x и a y не могут быть одновременно равны нулю. В формулу вводится дополнительный параметр λ , который может принимать любые действительные значения.

Назначение параметрического уравнения в том, чтобы установить неявную зависимости между координатами точек прямой линии. Для этого и вводится параметр λ .

Числа x , y представляют собой координаты некоторой точки прямой. Они вычисляются по параметрическим уравнениям прямой при некотором действительном значении параметра λ .

Предположим, что λ = 0 .

Тогда x = x 1 + a x · 0 y = y 1 + a y · 0 ⇔ x = x 1 y = y 1 , т. е. точка с координатами ( x 1 , y 1 ) принадлежит прямой.

Обращаем ваше внимание на то, что коэффициенты a x и a y при параметре λ в данном виде уравнений представляют собой координаты направляющего вектора прямой линии.

Рассмотрим параметрические уравнения прямой линии вида x = 2 + 3 · λ y = 3 + λ . Прямая, заданная уравнениями, в декартовой системе координат проходит через точку ( x 1 , y 1 ) и имеет направляющий вектор a → = ( 3 , 1 ) .

Больше информации ищите в статье «Параметрические уравнения прямой на плоскости».

Нормальное уравнение прямой

Нормальное уравнение прямой имеет вид , A x + B y + C = 0 , где числа А , В , и C таковы, что длина вектора n → = ( A , B ) равна единице, а C ≤ 0 .

Нормальным вектором линии, заданной нормальным уравнением прямой в прямоугольной системе координат O х у , является вектор n → = ( A , B ) . Эта прямая проходит на расстоянии C от начала координат в направлении вектора n → = ( A , B ) .

Еще одним вариантом записи нормального уравнения прямой линии является cos α · x + cos β · y — p = 0 , где cos α и cos β — это два действительных числа, которые представляют собой направляющие косинусы нормального вектора прямой единичной длины. Это значит, что n → = ( cos α , cos β ) , справедливо равенство n → = cos 2 α + cos 2 β = 1 , величина p ≥ 0 и равна расстоянию от начала координат до прямой.

Рассмотрим общее уравнение прямой — 1 2 · x + 3 2 · y — 3 = 0 . Это общее уравнение прямой является нормальным уравнением прямой, так как n → = A 2 + B 2 = — 1 2 2 + 3 2 = 1 и C = — 3 ≤ 0 .

Уравнение задает в декартовой системе координат 0ху прямую линию, нормальный вектор которой имеет координаты — 1 2 , 3 2 . Линия удалена от начала координат на 3 единицы в направлении нормального вектора n → = — 1 2 , 3 2 .

Обращаем ваше внимание на то, что нормальное уравнение прямой на плоскости позволяет находить расстояние от точки до прямой на плоскости.

Если в общем уравнении прямой A x + B y + C = 0 числа А , В и С таковы, что уравнение A x + B y + C = 0 не является нормальным уравнением прямой, то его можно привести к нормальному виду. Подробнее об этом читайте в статье «Нормальное уравнение прямой».

Принадлежность точки отрезку. Почему не работает классика?

IP76 > Векторная графика > Принадлежность точки отрезку. Почему не работает классика?

Определить принадлежность точки отрезку, казалось бы, вполне себе тривиальная задача из школьного курса геометрии. Однако, есть определенные нюансы, которые заставляют усомниться в верности классической формулы:

Причины и постановка задачи

Запросы «как найти принадлежность точки отрезку» уводят на страницу «Пересечение прямых, угол и координаты пересечения», где есть пункт «Принадлежность точки отрезку». В нем рассматривается факт принадлежности точки отрезку, уже после того, как мы определили точку пересечения прямых. То есть точка уже принадлежит прямым, и это абсолютно точно. Осталось только определиться, точка в отрезке между двумя точками отрезка, либо где-то на прямой мимо них.

Людям свойственно искать готовые решения, и код, представленный в статье вряд ли удовлетворит запросу «как найти принадлежность точки отрезку, заданный двумя точками«. Поэтому здесь задачу так и сформулируем:

Есть отрезок, заданный точками P1(x1,y1) и P2 (x2,y2) . Необходимо определить, принадлежит ли точка P(x,y) этому отрезку.

Классическое уравнение

Предположим, вы делаете векторный редактор. Необходимо по курсору мыши определить попадает ли точка в ранее нарисованный отрезок. В этом многотрудном деле такая задача возникает всегда.

Для совместимости с Delphi 7 введем тип вещественной точки:

Почему бы не сделать сразу TPointF вместо типа TxPoint? Просто у меня гора старых исходников, где используется этот тип, а никакого TPointF не было ни в помине, ни в планах. Delphi 7 казалась вершиной инженерной мысли на тот момент.

В предложение uses дописываем следующее (ради TPointF, и чтобы компилятор XE не доставал хинтами):

Почему именно XE5? Если честно, нет возможности проверить, не ставить же ради этого всю линейку дельфей. Но в XE5 вещественная точка точно есть, а в Delphi 7 ее точно нет. Вот этим и объясняется выбор версии компилятора в директиве. Одни говорят, что TPointF появился в XE2, другие — аж в Delphi 2010. Короче, с таким директивным условием будет работать везде и точка.

Пишем небольшую функцию, которая использует классическое уравнение прямой, проходящей через две различные точки на плоскости, представленное выше.

SameValue — сравнивает два вещественных числа с учетом погрешности Epsilon. Находится в модуле Math, который надо подключить в предложении uses секции implementation.

Что происходит. Вначале проверяется допустимость координаты точки внутри координат отрезка. Условие необходимое, но недостаточное. Если координата может принадлежать отрезку, третьим условием проверяем нахождение точки на прямой, проходящей через точки отрезка.

Рис.1. Курсор точно на линии, но не определяет, что точка принадлежит отрезку

Если мы попытаемся по координатам курсора мыши определить, попала ли точка в отрезок, нас ждет фиаско. Складывается ощущение, что формула не работает, алгебра — отстой, все в жизни не так.

Расширенная классика

Для начала навесим на функцию еще пару условий, чтобы определить попадание в точки, задающие отрезок.

Ну, во-первых, вот и разгадка, куда делись значения 1 и 2 из результатов предыдущей функции. Во-вторых, теперь в конечные точки отрезка попадает отлично, но между ними по-прежнему не хочет работать.

На самом деле — математика по-прежнему царица наук, а мы пытаемся повенчать розу белую с черной жабой.

Выведем в интерфейс значения dx = (p2.x-p1.x), dy = (p2.y-p1.y) и т.д. Плюс результат работы функции (p.x-p1.x)*(p2.y-p1.y) — (p.y-p1.y)*(p2.x-p1.x). И убедимся, что при самых казалось бы максимально возможных приближениях к отрезку, результат ошеломляет своей двух- или трехзначной непохожестью на ноль.

Рис.2. Теперь определяет конечные точки, но между ними по-прежнему работает так себе…

Конечно, используя операцию умножения вместо деления, мы избегаем деления на ноль, укорачиваем код. Но при этом надо помнить, что умножение даже 1 на 12, это уже далеко от нуля, а если появляется еще и минус в разницах, то от нуля мы улетаем очень быстро и очень ощутимо.

На рисунке 2 прицел точно на линии, но разность координат, которую получаем из классического уравнения, и которая должна быть равна нулю, между тем равна:

Функция применима в точных расчетах, но не в векторном редакторе.

Модификация уравнения

Очевидно, надо вычислять как-то иначе. Например вычислять Y по имеющейся координате X и сравнивать с имеющейся координатой Y. Если разница меньше заданного Epsilon — точка принадлежит отрезку. Выразим Y из используемого уравнения прямой. Итак, дано:

Выразим Y:

И напишем еще одну функцию, в которой учтем ситуацию, когда (X2-X1) может быть равно нулю. Это ситуация вертикальной (или почти вертикальной) прямой.

Epsilon уже выступает, и как точность вычислений, и как допуск, при котором мы считаем, что точка на отрезке. Невозможно скрупулезно попасть мышкой в нужную точку отрезка, которая сама по себе уже есть огромное приближение к действительности. Все мы помним и любим Брезенхэма.

Рис.3. Все здорово определяет с учетом погрешности Epsilon=12 pix

Но, даже если мы упростили себе процесс «попадания» в отрезок, мы должны знать точные координаты на отрезке. Для этого у нас и появился тип вещественной точки TxPoint и возвращаемый параметр res. В этой версии функции мы производим расчет реальной точки на отрезке.

На рисунке 3 расчетная точка и ее координаты выделена коричневым цветом.

Однако, все равно есть нюанс. Если линия сильно вертикальна, то есть расстояние (X2-X1) невелико, попадать в линию все равно трудно.

Рис.3.1. На почти вертикальной линии функция снова капризничает

Связано с тем, что при уменьшении делителя, коим разность по X выступает в нашем случае, сильно вырастает результат, и чем расстояние (X2-X1) меньше, тем труднее попасть в Epsilon.

Итоговая функция

В стремлении к совершенству, всегда что-то незамысловатое, в пару строк кода, разрастается в какую-то все учитывающую портянку листинга.

Давайте проверять, что больше (X2-X1) или (Y2-Y1), и в зависимости от результата, будем высчитывать либо Y, либо X. Формулу для X не привожу, он очевидна.

Почему такая большая функция получилась?

В функции помимо факта принадлежности точки отрезку, также осуществляется проверка на конечные точки — чтобы можно было менять их расположение мышкой. Также, функция возвращает «истинную» точку на отрезке, полученную из приближенной, содержащую погрешность Epsilon.

Можно сократить, не считать конечные точки, не анализировать «вертикальность» и «горизонтальность». Можно взять за настоящую ту точку, которую анализируем и не считать «истинную». Код в этом случае сильно сократиться. Поэтому лучше иметь полный комплект, из которого можно удалить «лишнее» на ваш взгляд.

Зачем нужны такие ощутимо большие проверки на вертикальность и горизонтальность. Ну, во-первых мы освобождаем от условий последний блок вычислений, во-вторых, если убрать, скажем, проверку на dy, погрешность станет в два раза меньше. Потому что отработает это условие: Abs(p1.Y-p.Y) + Abs(p2.Y-p.Y). Имея идеальную горизонтальную линию, подведя курсор на Epsilon допустимый интервал, мы получим в итоге Epsilon + Epsilon = 2 * Epsilon и условие конечно не сработает. Сработает, если подведем на расстояние в два раза меньшее Epsilon.

Если всех этих тонкостей не требуется, можно смело использовать либо эту, либо вообще эту функцию.

Классика всегда в моде или Математика — царица наук

Теперь давайте полученную в результате предыдущей функции вещественную точку res подставим в первую функцию. И убедимся, что теоретическая принадлежность точки отрезку работает прекрасно, просто в пространстве грубых целочисленных точек мы не в состоянии гарантированно получить такую точку, которая удовлетворила бы уравнению. Но если мы ее рассчитаем и получим значения с плавающей запятой — все заработает как надо.

Рис.5. Результат применения рассчитанной точки для первой функции

На рисунке 5 добавлен результат функции f(x,y)=(x-x1) * (y2-y1) — (y-y1) * (x2-x1) для рассчитанной точки на отрезке. Он равен, как и следовало ожидать, нулю. А также результат вызова первой функции, которая использует это уравнение и возвращает 3, если точка принадлежит отрезку. Что мы воочию и видим.

1)Поэтому в графике надо избегать типов TPoint, даже если это вызывает необходимость постоянно их округлять для функций GDI.

2)Поэтому функция правильная, классическая формула работает, просто в пространстве компьютерных упрощений надо использовать ту же самую формулу, но в другом качестве.

Скачать

Друзья, спасибо за внимание!

Надеюсь, материал был полезен.

Не пропустите новых интересных штуковин, подписывайтесь на телегу. )))

Если есть вопросы, с удовольствием отвечу.

Исходники и исполняемый файл для GDI и Delphi 7. Проверен в XE 7, XE 10.

Исходники (Delphi 7, XE7, XE10) 11 Кб

Исполняемый файл (zip) 213 Кб

Как подключить GDI+ в Delphi 7 и без проблем скомпилировать в XE 7, XE 10 читаем в этой статье. Там же забираем исходники.

Чтобы нарисовать отрезок, нажмите мышь и, не отпуская, ведите курсор. При отпускании отрезок зафиксируется. При повторном нажатии начнет рисоваться новый отрезок.

За концы отрезка можно таскать. Если попали на отрезок, т.е. видна коричневая точка, можно таскать весь отрезок.

Исходники намеренно выложены в D7 варианте.

При компиляции в XE10 следует снять галочку с Enable High-DPI

Вычислительная геометрия, или как я стал заниматься олимпиадным программированием. Часть 2

Вступление

Это вторая часть моей статьи посвящена вычислительной геометрии. Думаю, эта статья будет интереснее предыдущей, поскольку задачки будут чуть сложнее.

Начнем с взаимного расположения точки относительно прямой, луча и отрезка.

Задача №1

Определить взаимное расположении точки и прямой: лежит выше прямой, на прямой, под прямой.

Решение
Понятно, что если прямая задана своим уравнением ax + by + c = 0, то тут и решать нечего. Достаточно подставить координаты точки в уравнение прямой и проверить чему оно равно. Если больше нуля, то точка находится в верхней полуплоскости, если равна нулю, то точка находится на прямой и если меньше нуля, то точка находится в нижней полуплоскости. Интереснее случай, когда прямая задана, задана координатами двух точек назовем их P1(x1, y1), P2(x2, y2). В этом случае можно спокойно найти коэффициенты a, b и c и применить предыдущее рассуждение. Но надо сначала подумать, оно нам надо? Конечно, нет! Как я говорил косое произведения — это просто жемчужина вычислительной геометрии. Давайте применим его. Известно, что косое произведение двух векторов положительно, если поворот от первого вектора ко второму идет против часовой стрелки, равно нулю, если векторы коллинеарны и отрицательно, если поворот идет по часовой стрелки. Поэтому нам достаточно посчитать косое произведение векторов P1P2 и P1M и по его знаку сделать вывод.

Задача №2

Определить принадлежит ли точка лучу.

Решение
Давайте вспомним, что такое луч: луч — это прямая, ограниченная точкой с одной стороны, а с другой стороны бесконечная. То есть луч задается некоторой начальной точкой и любой точкой лежащей на нем. Пусть точка P1(x1, y1) — начало луча, а P2(x2, y2) — любая точка принадлежащая лучу. Понятно, что если точка принадлежит лучу, то она принадлежит и прямой проходящей через эти точки, но не наоборот. Поэтому принадлежность прямой является необходимым, но не достаточным условием для принадлежности лучу. Поэтому от проверки косового произведения нам никуда не деться. Для достаточного условия нужно вычислить еще и скалярное произведение тех же векторов. Если оно меньше нуля, то точка не принадлежит лучу, если же оно не отрицательно, то точка лежит на луче. Почему так? Давайте посмотрим на рисунок.

Итак, для того чтобы точка M(x, y) лежала на луче с начальной точкой P1(x1, y1), где P2(x2, y2) лежит на луче необходимо и достаточно выполнения двух условий:
1. [P1P2, P1M] = 0 – косое произведение (точка лежит на прямой)
2. (P1P2, P1M) ≥ 0 – скалярное произведение (точка лежит на луче)

Задача №3

Определить принадлежит ли точка отрезку.

Решение
Пусть точки P1(x1, y1), P2(x2, y2) концы заданного отрезка. Опять-таки необходимым условием принадлежности точки отрезку является ее принадлежность прямой проходящей через P1, P2. Далее нам нужно определить лежит ли точка между точками P1 и P2, для этого нам на помощь приходит скалярное произведение векторов только на этот раз других: (MP1, MP2). Если оно меньше либо равно нуля, то точка лежит на отрезке, иначе вне отрезка. Почему так? Посмотрим на рисунок.

Итак, для того чтобы точка M(x, y) лежала на отрезке с концами P1(x1, y1), P2(x2, y2) необходимо и достаточно выполнения условий:
1. [P1P2, P1M] = 0 – косое произведение (точка лежит на прямой)
2. (MP1,MP2) ≤ 0 – скалярное произведение (точка лежит между P1 и P2)

Задача №4

Взаимное расположение двух точек относительно прямой.

Решение
В этой задаче необходимо определить по одну или по разные стороны относительно прямой находятся две точки.

Если точки находятся по разные стороны относительно прямой, то косые произведения имеют разные знаки, а значит их произведение отрицательно. Если же точки лежат по одну сторону относительно прямой, то знаки косых произведений совпадают, значит, их произведение положительно.
Итак:
1. [P1P2, P1M1] * [P1P2, P1M2] 0 – точки лежат по одну сторону.
3. [P1P2, P1M1] * [P1P2, P1M2] = 0 – одна (или две) из точек лежит на прямой.

Кстати, задача об определении наличия точки пересечения у прямой и отрезка решается точно также. Точнее, это и есть эта же задача: отрезок и прямая пересекаются, когда концы отрезка находятся по разные стороны относительно прямой или когда концы отрезка лежат на прямой, то есть необходимо потребовать [P1P2, P1M1] * [P1P2, P1M2] ≤ 0.

Задача №5

Определить пересекаются ли две прямые.

Решение
Будем считать, что прямые не совпадают. Понятно, что прямые не пересекаются, только если они параллельны. Поэтому, найдя условие параллельности, мы можем, определить пересекаются ли прямые.
Допустим прямые заданы своими уравнениями a1x + b1y + c1 = 0 и a2x + b2y + c2 = 0. Тогда условие параллельности прямых заключается в том, что a1b2 — a2b1 = 0.
Если же прямые заданы точками P1(x1, y1), P2(x2, y2), M1(x3, y3), M2(x4, y4), то условие их параллельности заключается в проверки косого произведения векторов P1P2 и M1M2: если оно равно нулю, то прямые параллельны.

В общем, то когда прямые заданы своими уравнениями мы тоже проверяем косое произведение векторов (-b1, a1), (-b2, a2) которые называются направляющими векторами.

Задача №6

Определить пересекаются ли два отрезка.

Решение
Вот эта задача мне, действительно, нравится. Отрезки пересекаются тогда, когда, концы каждого отрезка лежат по разные стороны от другого отрезка. Посмотрим на рисунок:

Итак, нам нужно проверить, чтобы концы каждого из отрезков лежали по разные стороны относительного концов другого отрезка. Пользуемся косым произведением векторов. Посмотрите на первый рисунок: [P1P2, P1M2] > 0, [P1P2, P1M1] [P1P2, P1M2] * [P1P2, P1M1] 2 + b 2 ).

Задача №8

Расстояние от точки до луча.

Решение
Эта задача отличается от предыдущей тем, что в этом случае может получиться, так что перпендикуляр из точки не падает на луч, а падает на его продолжение.

В случае, когда перпендикуляр не падает на луч необходимо найти расстояние от точки до начала луча – это и будет ответом на задачу.

Как же определить падает ли перпендикуляр на луч или нет? Если перпендикуляр не падает на луч, то угол MP1P2 – тупой иначе острый (прямой). Поэтому по знаку скалярного произведения векторов мы можем определить попадает ли перпендикуляр на луч или нет:
1. (P1M, P1P2) 2 .

Теперь рассмотрим случай, когда центр второго круга O2 находится между точками O1 и C. В этом случае получим отрицательное значение величины d2. Использование отрицательного значения d2 приводит к отрицательному значению α. В этом случае необходимо для правильного ответа прибавить к α 2π.

Заключение

Ну вот и все. Мы рассмотрели не все, но наиболее часто встречаемые задачи вычислительной геометрии касающиеся взаимного расположения объектов.


источники:

http://ip76.ru/point-in-segment/

http://habr.com/ru/post/148325/