Координаты точки пересечения прямых. Простейшие задачи с прямой на плоскости

В былые времена я увлекался компьютерной графикой, как 2х так и 3х мерной, в том числе математическими визуализациями. Что называется just for fun, будучи студентом, написал программу визуализирующую N-мерные фигуры, вращающиеся в любых измерениях, хотя практически меня хватило только на определение точек для 4-D гиперкуба. Но это только присказка. Любовь к геометрии осталась у меня с тех пор и по сей день, и я до сих пор люблю решать интересные задачи интересными способами.
Одна из таких задач попалась мне в 2010 году. Сама задача достаточно тривиальна: необходимо найти, пересекаются ли два 2-D отрезка, и если пересекаются - найти точку их пересечения. Более интересно решение, которое, я считаю, получилось достаточно элегантным, и которое я хочу предложить на суд читателя. На оригинальность алгоритма не претендую (хотя и хотелось бы), но в сети подобных решений я найти не смог.
Задача
Даны два отрезка, каждый из которых задан двумя точками: (v11, v12), (v21, v22). Необходимо определить, пересекаются ли они, и если пересекаются, найти точку их пересечения.
Решение
Для начала необходимо определить, пересекаются ли отрезки. Необходимое и достаточное условие пересечения, которое должно быть соблюдено для обоих отрезков следующее: конечные точки одного из отрезков должны лежать в разных полуплоскостях, если разделить плоскость линией, на которой лежит второй из отрезков. Продемонстрируем это рисунком.

На левом рисунке (1) показаны два отрезка, для обоих из которых условие соблюдено, и отрезки пересекаются. На правом (2) рисунке условие соблюдено для отрезка b, но для отрезка a оно не соблюдается, соответственно отрезки не пересекаются.
Может показаться, что определить, с какой стороны от линии лежит точка - нетривиальная задача, но у страха глаза велики, и всё не так сложно. Мы знаем, что векторное умножение двух векторов даёт нам третий вектор, направление которого зависит от того, положительный или отрицательный угол между первым и вторым вектором, соответственно такая операция антикоммутативна. А так как все вектора лежат на плоскости X-Y, то их векторное произведение (которое обязано быть перпендикулярным перемножаемым векторам) будет иметь ненулевой только компоненту Z, соответственно и отличие произведений векторов будет только в этой компоненте. Причем при изменении порядка перемножения векторов (читай: угла между перемножаемыми векторами) состоять оно будет исключительно в изменении знака этой компоненты.
Поэтому мы можем умножить попарно-векторно вектор разделяющего отрезка на векторы направленные от начала разделяющего отрезка к обеим точкам проверяемого отрезка.

Если компоненты Z обоих произведений будет иметь различный знак, значит один из углов меньше 0 но больше -180, а второй больше 0 и меньше 180, соответственно точки лежат по разные стороны от прямой. Если компоненты Z обоих произведений имеют одинаковый знак, следовательно и лежат они по одну сторону от прямой.
Если один из компонент Z является нулём, значит мы имеем пограничный случай, когда точка лежит аккурат на проверяемой прямой. Оставим пользователю определять, хочет ли он считать это пересечением.
Затем нам необходимо повторить операцию для другого отрезка и прямой, и убедиться в том, что расположение его конечных точек также удовлетворяет условию.
Итак, если всё хорошо и оба отрезка удовлетворяют условию, значит пересечение существует. Давайте найдём его, и в этом нам также поможет векторное произведение.
Так как в векторном произведении мы имеем ненулевой лишь компоненту Z, то его модуль (длина вектора) будет численно равен именно этой компоненте. Давайте посмотрим, как найти точку пересечения.

Длина векторного произведения векторов a и b (как мы выяснили, численно равная его компоненте Z) равна произведению модулей этих векторов на синус угла между ними (|a| |b| sin(ab)). Соответственно, для конфигурации на рисунке мы имеем следующее: |AB x AC| = |AB||AC|sin(α), и |AB x AD| = |AB||AD| sin(β). |AC|sin(α) является перпендикуляром, опущенным из точки C на отрезок AB, а |AD|sin(β) является перпендикуляром, опущенным из точки D на отрезок AB (катетом ADD"). Так как углы γ и δ - вертикальные углы, то они равны, а значит треугольники PCC" и PDD" подобны, а соответственно и длины всех их сторон пропорциональны в равном отношении.
Имея Z1 (AB x AC, а значит |AB||AC|sin(α)) и Z2 (AB x AD, а значит |AB||AD|sin(β)), мы можем рассчитать CC"/DD" (которая будет равна Z1/Z2), а также зная что CC"/DD" = CP/DP легко можно высчитать местоположение точки P. Лично я делаю это следующим образом:

Px = Cx + (Dx-Cx)*|Z1|/|Z2-Z1|;
Py = Cy + (Dy-Cy)*|Z1|/|Z2-Z1|;

Вот и все. Мне кажется что это действительно очень просто, и элегантно. В заключение хочу привести код функции, реализующий данный алгоритм. В функции использован самодельный шаблон vector, который является шаблоном вектора размерностью int с компонентами типа typename. Желающие легко могут подогнать функцию к своим типам векторов.

1 template 2 bool are_crossing(vector const &v11, vector const &v12, vector const &v21, vector const &v22, vector *crossing) 3 { 4 vector cut1(v12-v11), cut2(v22-v21); 5 vector prod1, prod2; 6 7 prod1 = cross(cut1 * (v21-v11)); 8 prod2 = cross(cut1 * (v22-v11)); 9 10 if(sign(prod1[Z]) == sign(prod2[Z]) || (prod1[Z] == 0) || (prod2[Z] == 0)) // Отсекаем также и пограничные случаи 11 return false; 12 13 prod1 = cross(cut2 * (v11-v21)); 14 prod2 = cross(cut2 * (v12-v21)); 15 16 if(sign(prod1[Z]) == sign(prod2[Z]) || (prod1[Z] == 0) || (prod2[Z] == 0)) // Отсекаем также и пограничные случаи 17 return false; 18 19 if(crossing) { // Проверяем, надо ли определять место пересечения 20 (*crossing)[X] = v11[X] + cut1[X]*fabs(prod1[Z])/fabs(prod2[Z]-prod1[Z]); 21 (*crossing)[Y] = v11[Y] + cut1[Y]*fabs(prod1[Z])/fabs(prod2[Z]-prod1[Z]); 22 } 23 24 return true; 25 }

Урок из серии «Геометрические алгоритмы»

Здравствуйте, дорогой читатель!

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

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

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

Причина известна: на типе Real в системе программирования Паскаль нет отношения порядка, поэтому записи вида a = b, где a и b вещественные числа, лучше не использовать.
Сегодня мы введем в употребление функцию RealEq() для реализации операции “=” (строго равно) :

Function RealEq(Const a, b:Real):Boolean; {строго равно} begin RealEq:=Abs(a-b)<=_Eps End; {RealEq}

Задача. Заданы уравнения двух прямых: и . Найти точку их пересечения.

Решение. Очевидное решение состоит в том, чтобы решить систему уравнений прямых: Давайте перепишем эту системе несколько иначе:
(1)

Введем обозначения: , , . Здесь D – определитель системы, а - определители, получающиеся в результате замены столбца коэффициентов при соответствующем неизвестном столбцом свободных членов. Если , то система (1) является определенной, то есть имеет единственное решение. Это решение можно найти по следующим формулам: , , которые называются формулами Крамера . Напомню, как вычисляется определитель второго порядка. В определителе различают две диагонали: главную и побочную. Главная диагональ состоит из элементов, взятых по направлению от верхнего левого угла определителя в нижний правый угол. Побочная диагональ – из правого верхнего в нижний левый. Определитель второго порядка равен произведению элементов главной диагонали минус произведение элементов побочной диагонали.

В программном коде для проверки проверка равенства используется функция RealEq(). Вычисления над вещественными числами производятся с точностью до _Eps=1e-7.

Program geom2; Const _Eps: Real=1e-7;{точность вычислений} var a1,b1,c1,a2,b2,c2,x,y,d,dx,dy:Real; Function RealEq(Const a, b:Real):Boolean; {строго равно} begin RealEq:=Abs(a-b)<=_Eps End; {RealEq} Function LineToPoint(a1,b1,c1,a2,b2,c2: real; var x,y:real):Boolean; {Определение координат точки пересечения двух линий. Значение функции равно true, если точка пересечения есть, и false, если прямые параллельны. } var d:real; begin d:=a1*b2-b1*a2; if Not(RealEq(d,0)) then begin LineToPoint:=True; dx:=-c1*b2+b1*c2; dy:=-a1*c2+c1*a2; x:=dx/d; y:=dy/d; end else LineToPoint:=False End;{LineToPoint} begin {main} writeln("Введите коэффициенты уравнений: a1,b1,c1,a2,b2,c2 "); readln(a1,b1,c1,a2,b2,c2); if LineToPoint(a1,b1,c1,a2,b2,c2,x,y) then writeln(x:5:1,y:5:1) else writeln("Прямые параллельны."); end.

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

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

Взаимное расположение двух прямых

Тот случай, когда зал подпевает хором. Две прямые могут :

1) совпадать;

2) быть параллельными: ;

3) или пересекаться в единственной точке: .

Справка для чайников : пожалуйста, запомните математический знак пересечения , он будет встречаться очень часто. Запись обозначает, что прямая пересекается с прямой в точке .

Как определить взаимное расположение двух прямых?

Начнём с первого случая:

Две прямые совпадают, тогда и только тогда, когда их соответствующие коэффициенты пропорциональны , то есть, существует такое число «лямбда», что выполняются равенства

Рассмотрим прямые и составим три уравнения из соответствующих коэффициентов: . Из каждого уравнения следует, что , следовательно, данные прямые совпадают.

Действительно, если все коэффициенты уравнения умножить на –1 (сменить знаки), и все коэффициенты уравнения сократить на 2, то получится одно и то же уравнение: .

Второй случай, когда прямые параллельны:

Две прямые параллельны тогда и только тогда, когда их коэффициенты при переменных пропорциональны: , но .

В качестве примера рассмотрим две прямые . Проверяем пропорциональность соответствующих коэффициентов при переменных :

Однако совершенно очевидно, что .

И третий случай, когда прямые пересекаются:

Две прямые пересекаются, тогда и только тогда, когда их коэффициенты при переменных НЕ пропорциональны , то есть НЕ существует такого значения «лямбда», чтобы выполнялись равенства

Так, для прямых составим систему:

Из первого уравнения следует, что , а из второго уравнения: , значит, система несовместна (решений нет). Таким образом, коэффициенты при переменных не пропорциональны.

Вывод: прямые пересекаются

В практических задачах можно использовать только что рассмотренную схему решения. Она, кстати, весьма напоминает алгоритм проверки векторов на коллинеарность, который мы рассматривали на уроке Понятие линейной (не) зависимости векторов. Базис векторов . Но существует более цивилизованная упаковка:

Пример 1

Выяснить взаимное расположение прямых:

Решение основано на исследовании направляющих векторов прямых:

а) Из уравнений найдём направляющие векторы прямых: .


, значит, векторы не коллинеарны и прямые пересекаются.

На всякий случай поставлю на распутье камень с указателями:

Остальные перепрыгивают камень и следуют дальше, прямо к Кащею Бессмертному =)

б) Найдем направляющие векторы прямых :

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

Очевидно, что коэффициенты при неизвестных пропорциональны, при этом .

Выясним, справедливо ли равенство :

Таким образом,

в) Найдем направляющие векторы прямых :

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

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

Теперь выясним, справедливо ли равенство . Оба свободных члена нулевые, поэтому:

Полученное значение удовлетворяет данному уравнению (ему удовлетворяет вообще любое число).

Таким образом, прямые совпадают.

Ответ :

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

Как построить прямую, параллельную данной?

За незнание этой простейшей задачи сурово наказывает Соловей-Разбойник.

Пример 2

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

Решение : Обозначим неизвестную прямую буквой . Что о ней сказано в условии? Прямая проходит через точку . А если прямые параллельны, то очевидно, что направляющий вектор прямой «цэ» подойдёт и для построения прямой «дэ».

Вытаскиваем направляющий вектор из уравнения :

Ответ :

Геометрия примера выглядит незатейливо:

Аналитическая же проверка состоит в следующих шагах:

1) Проверяем, что у прямых один и тот же направляющий вектор (если уравнение прямой не упрощено должным образом, то векторы будут коллинеарны).

2) Проверяем, удовлетворяет ли точка полученному уравнению .

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

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

Пример 3

Составить уравнение прямой, проходящей через точку , параллельную прямой , если

Существует рациональный и не очень рациональный способ решения. Самый короткий путь – в конце урока.

С параллельными прямыми немного поработали и к ним ещё вернёмся. Случай совпадающих прямых малоинтересен, поэтому рассмотрим задачу, которая хорошо знакома вам из школьной программы:

Как найти точку пересечения двух прямых?

Если прямые пересекаются в точке , то её координаты являются решением системы линейных уравнений

Как найти точку пересечения прямых? Решить систему.

Вот вам и геометрический смысл системы двух линейных уравнений с двумя неизвестными – это две пересекающиеся (чаще всего) прямые на плоскости.

Пример 4

Найти точку пересечения прямых

Решение : Существуют два способа решения – графический и аналитический.

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

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

Графический способ, конечно, неплох, но существует заметные минусы. Нет, дело не в том, что так решают семиклассники, дело в том, что на правильный и ТОЧНЫЙ чертёж уйдёт время. Кроме того, некоторые прямые построить не так-то просто, да и сама точка пересечения может находиться где-нибудь в тридесятом царстве за пределами тетрадного листа.

Поэтому точку пересечения целесообразнее искать аналитическим методом. Решим систему:

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

Ответ :

Проверка тривиальна – координаты точки пересечения должны удовлетворять каждому уравнению системы.

Пример 5

Найти точку пересечения прямых в том случае, если они пересекаются.

Это пример для самостоятельного решения. Задачу удобно разбить на несколько этапов. Анализ условия подсказывает, что необходимо:
1) Составить уравнение прямой .
2) Составить уравнение прямой .
3) Выяснить взаимное расположение прямых .
4) Если прямые пересекаются, то найти точку пересечения.

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

Полное решение и ответ в конце урока:

Ещё не стоптана и пара башмаков, как мы подобрались ко второму разделу урока:

Перпендикулярные прямые. Расстояние от точки до прямой.
Угол между прямыми

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

Как построить прямую, перпендикулярную данной?

Пример 6

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

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

Из уравнения «снимаем» вектор нормали: , который и будет направляющим вектором прямой .

Уравнение прямой составим по точке и направляющему вектору :

Ответ :

Развернём геометрический этюд:

М-да… Оранжевое небо, оранжевое море, оранжевый верблюд.

Аналитическая проверка решения:

1) Из уравнений вытаскиваем направляющие векторы и с помощью скалярного произведения векторов приходим к выводу, что прямые действительно перпендикулярны: .

Кстати, можно использовать векторы нормали, это даже проще.

2) Проверяем, удовлетворяет ли точка полученному уравнению .

Проверку, опять же, легко выполнить устно.

Пример 7

Найти точку пересечения перпендикулярных прямых , если известно уравнение и точка .

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

Наше увлекательное путешествие продолжается:

Расстояние от точки до прямой

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

Расстояние в геометрии традиционно обозначают греческой буквой «ро», например: – расстояние от точки «эм» до прямой «дэ».

Расстояние от точки до прямой выражается формулой

Пример 8

Найти расстояние от точки до прямой

Решение : всё что нужно, это аккуратно подставить числа в формулу и провести вычисления:

Ответ :

Выполним чертёж:

Найденное расстояние от точки до прямой – это в точности длина красного отрезка. Если оформить чертёж на клетчатой бумаге в масштабе 1 ед. = 1 см (2 клетки), то расстояние можно измерить обыкновенной линейкой.

Рассмотрим ещё одно задание по этому же чертежу:

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

1) Находим прямую , которая перпендикулярна прямой .

2) Находим точку пересечения прямых: .

Оба действия подробно разобраны в рамках данного урока.

3) Точка является серединой отрезка . Нам известны координаты середины и одного из концов. По формулам координат середины отрезка находим .

Не лишним будет проверить, что расстояние тоже равно 2,2 единицам.

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

Как найти расстояние между двумя параллельными прямыми?

Пример 9

Найти расстояние между двумя параллельными прямыми

Это очередной пример для самостоятельного решения. Немного подскажу: тут бесконечно много способов решения. Разбор полётов в конце урока, но лучше постарайтесь догадаться сами, думаю, вашу смекалку удалось неплохо разогнать.

Угол между двумя прямыми

Что ни угол, то косяк:


В геометрии за угол между двумя прямыми принимается МЕНЬШИЙ угол, из чего автоматически следует, что он не может быть тупым. На рисунке угол, обозначенный красной дугой, не считается углом между пересекающимися прямыми. А считается таковым его «зелёный» сосед или противоположно ориентированный «малиновый» угол .

Если прямые перпендикулярны, то за угол между ними можно принимать любой из 4 углов.

Чем отличаются углы ? Ориентацией. Во-первых, принципиально важным является направление «прокрутки» угла. Во-вторых, отрицательно ориентированный угол записывается со знаком «минус», например, если .

Зачем я это рассказал? Вроде бы можно обойтись и обычным понятием угла. Дело в том, что в формулах, по которым мы будем находить углы, запросто может получиться отрицательный результат, и это не должно застать вас врасплох. Угол со знаком «минус» ничем не хуже, и имеет вполне конкретный геометрический смысл. На чертеже для отрицательного угла следует обязательно указывать стрелкой его ориентацию (по часовой стрелке).

Как найти угол между двумя прямыми? Существуют две рабочие формулы:

Пример 10

Найти угол между прямыми

Решение и Способ первый

Рассмотрим две прямые, заданные уравнениями в общем виде:

Если прямые не перпендикулярны , то ориентированный угол между ними можно вычислить с помощью формулы:

Самое пристальное внимание обратим на знаменатель – это в точности скалярное произведение направляющих векторов прямых:

Если , то знаменатель формулы обращается в ноль, а векторы будут ортогональны и прямые перпендикулярны. Именно поэтому сделана оговорка о неперпендикулярности прямых в формулировке.

Исходя из вышесказанного, решение удобно оформить в два шага:

1) Вычислим скалярное произведение направляющих векторов прямых:
, значит, прямые не перпендикулярны.

2) Угол между прямыми найдём по формуле:

С помощью обратной функции легко найти и сам угол. При этом используем нечётность арктангенса (см. Графики и свойства элементарных функций ):

Ответ :

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

Ну, минус, так минус, ничего страшного. Вот геометрическая иллюстрация:

Неудивительно, что угол получился отрицательной ориентации, ведь в условии задачи первым номером идёт прямая и «открутка» угла началась именно с неё.

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

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

Шаги

Точка пересечения двух прямых

    Запишите уравнение каждой прямой, обособив переменную «у» на левой стороне уравнения. Другие члены уравнения должны размещаться на правой стороне уравнения. Возможно, данное вам уравнение вместо «у» будет содержать переменную f(x) или g(x); в этом случае обособьте такую переменную. Для обособления переменной выполните соответствующие математические операции на обеих сторонах уравнения.

    • Если уравнения прямых вам не даны, на основе известной вам информации.
    • Пример . Даны прямые, описываемые уравнениями и y − 12 = − 2 x {\displaystyle y-12=-2x} . Чтобы во втором уравнении обособить «у», прибавьте к обеим сторонам уравнения число 12:
  1. Вы ищете точку пересечения обеих прямых, то есть точку, координаты (х,у) которой удовлетворяют обоим уравнениям. Так как на левой стороне каждого уравнения находится переменная «у», то выражения, расположенные с правой стороны каждого уравнения, можно приравнять. Запишите новое уравнение.

    • Пример . Так как y = x + 3 {\displaystyle y=x+3} и y = 12 − 2 x {\displaystyle y=12-2x} , то можно записать такое равенство: .
  2. Найдите значение переменной «х». Новое уравнение содержит только одну переменную «х». Для нахождения «х» обособьте эту переменную на левой стороне уравнения, выполнив соответствующие математические операции на обеих сторонах уравнения. Вы должны получить уравнение вида х = __ (если вы не можете это сделать, этого раздела).

    • Пример . x + 3 = 12 − 2 x {\displaystyle x+3=12-2x}
    • Прибавьте 2 x {\displaystyle 2x} к каждой стороне уравнения:
    • 3 x + 3 = 12 {\displaystyle 3x+3=12}
    • Вычтите 3 из каждой стороны уравнения:
    • 3 x = 9 {\displaystyle 3x=9}
    • Разделите каждую сторону уравнения на 3:
    • x = 3 {\displaystyle x=3} .
  3. Используйте найденное значение переменной «х» для вычисления значения переменной «у». Для этого подставьте найденное значение «х» в уравнение (любое) прямой.

    • Пример . x = 3 {\displaystyle x=3} и y = x + 3 {\displaystyle y=x+3}
    • y = 3 + 3 {\displaystyle y=3+3}
    • y = 6 {\displaystyle y=6}
  4. Проверьте ответ. Для этого подставьте значение «х» в другое уравнение прямой и найдите значение «у». Если вы получите разные значение «у», проверьте правильность ваших вычислений.

    • Пример: x = 3 {\displaystyle x=3} и y = 12 − 2 x {\displaystyle y=12-2x}
    • y = 12 − 2 (3) {\displaystyle y=12-2(3)}
    • y = 12 − 6 {\displaystyle y=12-6}
    • y = 6 {\displaystyle y=6}
    • Вы получили такое же значение «у», поэтому в ваших вычислениях ошибок нет.
  5. Запишите координаты (х,у). Вычислив значения «х» и «у», вы нашли координаты точки пересечения двух прямых. Запишите координаты точки пересечения в виде (х,у).

    • Пример . x = 3 {\displaystyle x=3} и y = 6 {\displaystyle y=6}
    • Таким образом, две прямые пересекаются в точке с координатами (3,6).
  6. Вычисления в особых случаях. В некоторых случаях значение переменной «х» найти нельзя. Но это не значит, что вы допустили ошибку. Особый случай имеет место при выполнении одного из следующих условий:

    • Если две прямые параллельны, они не пересекаются. При этом переменная «х» просто сократится, а ваше уравнение превратится в бессмысленное равенство (например, 0 = 1 {\displaystyle 0=1} ). В этом случае в ответе запишите, что прямые не пересекаются или решения нет.
    • Если оба уравнения описывают одну прямую, то точек пересечения будет бесконечное множество. При этом переменная «х» просто сократится, а ваше уравнение превратится в строгое равенство (например, 3 = 3 {\displaystyle 3=3} ). В этом случае в ответе запишите, что две прямые совпадают.

    Задачи с квадратичными функциями

    1. Определение квадратичной функции. В квадратичной функции одна или несколько переменных имеют вторую степень (но не выше), например, x 2 {\displaystyle x^{2}} или y 2 {\displaystyle y^{2}} . Графиками квадратичных функций являются кривые, которые могут не пересекаться или пересекаться в одной или двух точках. В этом разделе мы расскажем вам, как найти точку или точки пересечения квадратичных кривых.

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

      • Пример . Найдите точку (точки) пересечения графиков x 2 + 2 x − y = − 1 {\displaystyle x^{2}+2x-y=-1} и
      • Обособьте переменную «у» на левой стороне уравнения:
      • и y = x + 7 {\displaystyle y=x+7} .
      • В этом примере вам дана одна квадратичная функция и одна линейная функция. Помните, что если вам даны две квадратичные функции, вычисления аналогичны шагам, изложенным далее.
    3. Приравняйте выражения, расположенные с правой стороны каждого уравнения. Так как на левой стороне каждого уравнения находится переменная «у», то выражения, расположенные с правой стороны каждого уравнения, можно приравнять.

      • Пример . y = x 2 + 2 x + 1 {\displaystyle y=x^{2}+2x+1} и y = x + 7 {\displaystyle y=x+7}
    4. Перенесите все члены полученного уравнения на его левую сторону, а на правой стороне запишите 0. Для этого выполните базовые математические операции. Это позволит вам решить полученное уравнение.

      • Пример . x 2 + 2 x + 1 = x + 7 {\displaystyle x^{2}+2x+1=x+7}
      • Вычтите «x» из обеих сторон уравнения:
      • x 2 + x + 1 = 7 {\displaystyle x^{2}+x+1=7}
      • Вычтите 7 из обеих сторон уравнения:
    5. Решите квадратное уравнение. Перенеся все члены уравнения на его левую сторону, вы получили квадратное уравнение. Его можно решить тремя способами: при помощи специальной формулы, и .

      • Пример . x 2 + x − 6 = 0 {\displaystyle x^{2}+x-6=0}
      • При разложении уравнения на множители вы получите два двучлена, при перемножении которых получается исходное уравнение. В нашем примере первый член x 2 {\displaystyle x^{2}} можно разложить на х*х. Сделайте следующую запись: (x)(x) = 0
      • В нашем примере свободный член -6 можно разложить на следующие множители: − 6 ∗ 1 {\displaystyle -6*1} , − 3 ∗ 2 {\displaystyle -3*2} , − 2 ∗ 3 {\displaystyle -2*3} , − 1 ∗ 6 {\displaystyle -1*6} .
      • В нашем примере второй член – это х (или 1x). Сложите каждую пару множителей свободного члена (в нашем примере -6), пока не получите 1. В нашем примере подходящей парой множителей свободного члена являются числа -2 и 3 ( − 2 ∗ 3 = − 6 {\displaystyle -2*3=-6} ), так как − 2 + 3 = 1 {\displaystyle -2+3=1} .
      • Заполните пробелы найденной парой чисел: .
    6. Не забудьте про вторую точку пересечения двух графиков. Если вы решаете задачу быстро и не очень внимательно, вы можете забыть про вторую точку пересечения. Вот как найти координаты «х» двух точек пересечения:

      • Пример (разложение на множители) . Если в уравнении (x − 2) (x + 3) = 0 {\displaystyle (x-2)(x+3)=0} одно из выражений в скобках будет равно 0, то все уравнение будет равно 0. Поэтому можно записать так: x − 2 = 0 {\displaystyle x-2=0} x = 2 {\displaystyle x=2} и x + 3 = 0 {\displaystyle x+3=0} x = − 3 {\displaystyle x=-3} (то есть вы нашли два корня уравнения).
      • Пример (использование формулы или дополнение до полного квадрата) . При использовании одного из этих методов в процессе решения появится квадратный корень. Например, уравнение из нашего примера примет вид x = (− 1 + 25) / 2 {\displaystyle x=(-1+{\sqrt {25}})/2} . Помните, что при извлечении квадратного корня вы получите два решения. В нашем случае: 25 = 5 ∗ 5 {\displaystyle {\sqrt {25}}=5*5} , и 25 = (− 5) ∗ (− 5) {\displaystyle {\sqrt {25}}=(-5)*(-5)} . Поэтому запишите два уравнения и найдите два значения «х».
    7. Графики пересекаются в одной точке или вообще не пересекаются. Такие ситуации имеют место при соблюдении следующих условий:

      • Если графики пересекаются в одной точке, то квадратное уравнение раскладывается на одинаковые множители, например, (х-1) (х-1) = 0, а в формуле появляется квадратный корень из 0 ( 0 {\displaystyle {\sqrt {0}}} ). В этом случае уравнение имеет только одно решение.
      • Если графики вообще не пересекаются, то уравнение на множители не раскладывается, а в формуле появляется квадратный корень из отрицательного числа (например, − 2 {\displaystyle {\sqrt {-2}}} ). В этом случае в ответе напишите, что решения нет.

Точка пересечения прямых

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

Решение

Если две прямые не параллельны, то они пересекаются. Чтобы найти точку пересечения, достаточно составить из двух уравнений прямых систему и решить её:

Пользуясь формулой Крамера, сразу находим решение системы, которое и будет искомой точкой пересечения :



Если знаменатель нулевой, т.е.

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

Реализация

struct pt {double x, y;}; struct line {double a, b, c;}; constdouble EPS =1e-9; double det (double a, double b, double c, double d){return a * d — b * c;} bool intersect (line m, line n, pt & res){double zn = det (m.a, m.b, n.a, n.b);if(abs(zn)< EPS)returnfalse; res.x=- det (m.c, m.b, n.c, n.b)/ zn; res.y=- det (m.a, m.c, n.a, n.c)/ zn;returntrue;} bool parallel (line m, line n){returnabs(det (m.a, m.b, n.a, n.b))< EPS;} bool equivalent (line m, line n){returnabs(det (m.a, m.b, n.a, n.b))< EPS &&abs(det (m.a, m.c, n.a, n.c))< EPS &&abs(det (m.b, m.c, n.b, n.c))< EPS;}

Урок из серии «Геометрические алгоритмы »

Здравствуйте, дорогой читатель.

Совет 1: Как найти координаты точки пересечения двух прямых

Напишем еще три новые функции.

Функция LinesCross() будет определять, пересекаются ли два отрезка . В ней взаимное расположение отрезков определяется с помощью векторных произведений. Для вычисления векторных произведений напишем функцию – VektorMulti().

Функция RealLess() будет использоваться для реализации операции сравнения “<” (строго меньше) для вещественных чисел.

Задача1. Два отрезка заданы своими координатами. Составить программу, которая определяет, пересекаются ли эти отрезки , не находя точку пересечения.

Решение
. Второй задан точками .



Рассмотрим отрезок и точки и .

Точка лежит слева от прямой , для нее векторное произведение > 0, так как векторы положительно ориентированы.

Точка расположена справа от прямой, для нее векторное произведение < 0, так как векторы отрицательно ориентированы.

Для того чтобы точки и , лежали по разные стороны от прямой , достаточно, чтобы выполнялось условие < 0 (векторные произведения имели противоположные знаки).

Аналогичные рассуждения можно провести для отрезка и точек и .

Итак, если , то отрезки пересекаются.

Для проверки этого условия используется функцию LinesCross(), а для вычисления векторных произведений – функция VektorMulti().

ax, ay – координаты первого вектора,

bx, by – координаты второго вектора.

Program geometr4; {Пересекаются ли 2 отрезка?} Const _Eps: Real=1e-4; {точность вычслений} var x1,y1,x2,y2,x3,y3,x4,y4: real; var v1,v2,v3,v4: real;function RealLess(Const a, b: Real): Boolean; {Строго меньше} begin RealLess:= b-a> _Eps end; {RealLess}function VektorMulti(ax,ay,bx,by:real): real; {ax,ay — координаты a bx,by — координаты b } begin vektormulti:= ax*by-bx*ay; end;Function LinesCross(x1,y1,x2,y2,x3,y3,x4,y4:real): boolean; {Пересекаются ли отрезки?} begin v1:=vektormulti(x4-x3,y4-y3,x1-x3,y1-y3); v2:=vektormulti(x4-x3,y4-y3,x2-x3,y2-y3); v3:=vektormulti(x2-x1,y2-y1,x3-x1,y3-y1); v4:=vektormulti(x2-x1,y2-y1,x4-x1,y4-y1); if RealLess(v1*v2,0) and RealLess(v3*v4,0) {v1v2<0 и v3v4<0, отрезки пересекаются} then LinesCross:= true else LinesCross:= false end; {LinesCross}begin {main} writeln(‘Введите координаты отрезков: x1,y1,x2,y2,x3,y3,x4,y4’); readln(x1,y1,x2,y2,x3,y3,x4,y4); if LinesCross(x1,y1,x2,y2,x3,y3,x4,y4) then writeln (‘Да’) else writeln (‘Нет’) end.

Результаты выполнения программы:

Введите координаты отрезков: -1 1 2 2.52 2 1 -1 3
Да.

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

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

Уважаемый читатель.

Вы уже познакомились с несколькими уроками из серии «Геометрические алгоритмы». Все ли доступно написано? Я буду Вам очень признательна, если Вы оставите отзыв об этих уроках. Возможно, что-то нужно еще доработать.

С уважением, Вера Господарец.

Пусть даны два отрезка. Первый задан точками P 1 (x 1 ;y 1) и P 2 (x 2 ;y 2) . Второй задан точками P 3 (x 3 ;y 3) и P 4 (x 4 ;y 4) .

Взаимное расположение отрезков можно проверить с помощью векторных произведений:

Рассмотрим отрезок P 3 P 4 и точки P 1 и P 2 .

Точка P 1 лежит слева от прямой P 3 P 4 , для нее векторное произведение v 1 > 0 , так как векторы положительно ориентированы.
Точка P 2 расположена справа от прямой, для нее векторное произведение v 2 < 0 , так как векторы отрицательно ориентированы.

Для того чтобы точки P 1 и P 2 лежали по разные стороны от прямой P 3 P 4 , достаточно, чтобы выполнялось условие v 1 v 2 < 0 (векторные произведения имели противоположные знаки).

Аналогичные рассуждения можно провести для отрезка P 1 P 2 и точек P 3 и P 4 .

Итак, если v 1 v 2 < 0 и v 3 v 4 < 0 , то отрезки пересекаются.

Векторное произведение двух векторов вычисляется по формуле:

где:
ax , ay — координаты первого вектора,
bx , by — координаты второго вектора.

Уравнение прямой, проходящей через две различные точки, заданные своими координатами.

Пусть на прямой заданы две не совпадающие точки:P 1 с координатами (x 1 ;y 1) и P 2 с координатами (x 2 ; y 2) .

Пересечение прямых

Соответственно вектор с началом в точке P 1 и концом в точке P 2 имеет координаты (x 2 -x 1 , y 2 -y 1) . Если P(x, y) – произвольная точка на прямой, то координаты вектора P 1 P равны (x — x 1 , y – y 1).

С помощью векторного произведения условие коллинеарности векторов P 1 P и P 1 P 2 можно записать так:
|P 1 P,P 1 P 2 |=0 , т.е. (x-x 1)(y 2 -y 1)-(y-y 1)(x 2 -x 1)=0
или
(y 2 -y 1)x + (x 1 -x 2)y + x 1 (y 1 -y 2) + y 1 (x 2 -x 1) = 0

Последнее уравнение переписывается следующим образом:
ax + by + c = 0, (1)
где
a = (y 2 -y 1),
b = (x 1 -x 2),
c = x 1 (y 1 -y 2) + y 1 (x 2 -x 1)

Итак, прямую можно задать уравнением вида (1).

Как найти точку пересечения прямых?
Очевидное решение состоит в том, чтобы решить систему уравнений прямых:

ax 1 +by 1 =-c 1
ax 2 +by 2 =-c 2
(2)

Ввести обозначения:

Здесь D – определитель системы, а D x ,D y — определители, получающиеся в результате замены столбца коэффициентов при соответствующем неизвестном столбцом свободных членов. Если D ≠ 0 , то система (2) является определенной, то есть имеет единственное решение. Это решение можно найти по следующим формулам: x 1 =D x /D, y 1 =D y /D , которые называются формулами Крамера. Небольшое напоминание, как вычисляется определитель второго порядка. В определителе различают две диагонали: главную и побочную. Главная диагональ состоит из элементов, взятых по направлению от верхнего левого угла определителя в нижний правый угол. Побочная диагональ – из правого верхнего в нижний левый. Определитель второго порядка равен произведению элементов главной диагонали минус произведение элементов побочной диагонали.