Даны уравнения прямых когда они пересекаются

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

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

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

Прямые это бесконечные линии, поэтому на плоскости они всегда пересекаются. Если прямые не пересекаются значит они параллельны. Частные случаи поведения прямых на плоскости: прямые неопределенны, прямые параллельны, прямые совпадают, одна из прямых параллельна оси X или Y. Общие случаи «нормального» пересечения прямых и частные случаи учитываются в программном коде класса Intersections прикрепленного исходника.

Прямые пересекаются

Даны две прямые AB и CD расположенные на одной плоскости. Они пересекаются и необходимо найти точку пересечения. За основу берем классическое уравнение прямой и подставляя данные получаем систему уравнений для двух прямых.

Точку пересечения можно найти, решая совместно уравнения прямых. Два уравнения — две неизвестных величины. Если количество уравнений больше или равно количеству неизвестных, то система решаема. Точка пересечения двух прямых это такая точка, которая принадлежит обеим прямым.

Классическое уравнение прямой: Запишем уравнение в одну строчку: Вычислим коэффициенты и свободные члены: В итоге получаем уравнение прямой с коэффициентами:

Уравнение с линейными коэффициентами отличается от уравнения с угловым коэффициентом отсутствием операции деления. Минимум операций деления упрощает создание устойчивого программного кода.

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

Координаты точки пересечения это числа которые являются решением для каждого из уравнений прямых. Решая систему из двух уравнений находим в какой точке пересекаются прямые AB и CD.

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

Прямые параллельны

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

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

Применяя формулу у.2 выведем уравнения прямых: Получаем систему уравнений:

Итог: система уравнений параллельных прямых не имеет решений.

Уравнение в программный код

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

Точки определяющие прямые запишем в структуры Point. У каждой прямой две точки и они являются входными данными:
Определяем коэффициенты и свободные члены уравнений. Записываем их в соответствующие переменные:
Точка пересечения также будет храниться в структуре Point:

Вывод результата

В выражениях присутствует деление. Но знаменатель только тогда и только тогда будет равен нулю, когда обе прямые будут параллельны или оси X или оси Y. В этом случае они не пересекаются или совпадают. Это отслеживаемые состояния в классе Intersections , и вывод информации заканчивается до выбрасывания исключения при делении на ноль.

Проверка параллельности и совпадения

Проверка на перпендикулярность

Класс Intersections

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

Краткий листинг исходника дающий представление о структуре классов:

Применение класса Intersections

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

Прикрепленный файл

Прикрепленный файл архива содержит исходник классов Intersections, Info и программу демонстрирующую работу класса Intersections в режиме вычисления точки пересечения прямых на плоскости. Исходный код написан на языке C#, но его легко можно преобразовать в код на другом языке программирования. Для работы демонстрационной программы необходима установка платформы. .NET Core 3.1.

Скачать исходник

  • Файл: IntersectionsLineLine.zip
  • Размер: 84 Кбайт
  • Загрузки: 547

Похожая тематика

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

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

Если точка M, является точкой пересечения двух прямых, то она должна принадлежать этим прямым, а ее координаты удовлетворять уравнения этих прямых.

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

Если система уравнений:

  • имеет единственное решение, то прямые пересекаются;
  • имеет бесконечное множество решений, то прямые совпадают;
  • не имеет решений, то прямые не пересекаются (прямые параллельны между собой)

Решение: Для вычисления координат точки пересечения прямых, решим систему уравнений:

y = 2 x — 1 y = -3 x + 1

Вычтем из первого уравнения второе

y — y = 2 x — 1 — (-3 x + 1) y = -3 x + 1 => 0 = 5 x — 2 y = -3 x + 1

Из первого уравнения найдем значение x

5 x = 2 y = -3 x + 1 => x = 2 5 = 0.4 y = -3 x + 1

Подставим значение x во второе уравнение и найдем значение y

x = 0.4 y = -3·(0.4) + 1 = -1.2 + 1 = -0.2

Ответ. Точка пересечения двух прямых имеет координаты (0.4, -0.2)

Решение: Для вычисления координат точки пересечения прямых, решим систему уравнений:

y = 2 x — 1 x = 2 t + 1 y = t

В первое уравнение подставим значения x и y из второго и третьего уравнений.

t = 2·(2 t + 1) — 1 x = 2 t + 1 y = t => t = 4 t + 1 x = 2 t + 1 y = t =>

-3 t = 1 x = 2 t + 1 y = t => t = — 1 3 x = 2 t + 1 y = t

Подставим значение t во второе и третье уравнение

t = — 1 3 x = 2·(- 1 3 ) + 1 = — 2 3 + 1 = 1 3 y = — 1 3

Ответ. Точка пересечения двух прямых имеет координаты ( 1 3 , — 1 3 )

Решение: Для вычисления координат точки пересечения прямых, решим систему уравнений:

2 x + 3 y = 0 x — 2 3 = y 4

Из второго уравнения выразим y через x

2 x + 3 y = 0 y = 4· x — 2 3

Подставим y в первое уравнение

2 x + 3·4· x — 2 3 = 0 y = 4· x — 2 3 => 2 x + 4·( x — 2) = 0 y = 4· x — 2 3 =>

2 x + 4 x — 8 = 0 y = 4· x — 2 3 => 6 x = 8 y = 4· x — 2 3 =>

x = 8 6 = 4 3 y = 4· x — 2 3 => x = 8 6 = 4 3 y = 4· 4/3 — 2 3 = 4· -2/3 3 = — 8 9

Ответ. Точка пересечения двух прямых имеет координаты ( 4 3 , — 8 9 )

Решение: Обе прямые заданы уравнениями с угловым коэффициентом. Так как k 1 = k 2 = 2, то прямые параллельны. Так как эти прямые не совпадают то точек пересечения нет.

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

y = 2 x — 1 y = 2 x + 1

Вычтем из первого уравнения второе

y — y = 2 x — 1 — (2 x + 1) y = -3 x + 1 => 0 = -2 y = -3 x + 1

В первом уравнении получили противоречие (0 ≠ -2), значит система не имеет решений — отсутствуют точки пересечения прямых (прямые параллельны).

Ответ. Прямые не пересекаются (прямые параллельны).

Решение: Подставим координаты точки N в уравнения прямых.

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

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

Если система уравнений:

  • имеет единственное решение, то прямые пересекаются;
  • имеет бесконечное множество решений, то прямые совпадают;
  • не имеет решений, то прямые не пересекаются (прямые параллельны или скрещиваются между собой)

Решение: Составим систему уравнений

x — 1 = a y — 1 = a z — 1 = a x — 3 -2 = b 2 — y = b z = b => x = a + 1 y = a + 1 z = a + 1 x — 3 -2 = b 2 — y = b z = b =>

Подставим значения x , y , z из 1, 2, 3 уравнений в 4, 5, 6 уравнения

x = a + 1 y = a + 1 z = a + 1 a + 1 — 3 -2 = b 2 — ( a + 1) = b a + 1 = b => x = a + 1 y = a + 1 z = a + 1 a — 2 -2 = b 1 — a = b a + 1 = b

К шестому уравнению добавим пятое уравнение

x = a + 1 y = a + 1 z = a + 1 a — 2 -2 = b 1 — a = b a + 1 + (1 — a ) = b + b => x = a + 1 y = a + 1 z = a + 1 a — 2 -2 = b 1 — a = b b = 1

Подставим значение b в четвертое и пятое уравнения

x = a + 1 y = a + 1 z = a + 1 a — 2 -2 = 1 1 — a = 1 b = 1 => x = a + 1 y = a + 1 z = a + 1 a — 2 = -2 a = 0 b = 1 =>

x = a + 1 y = a + 1 z = a + 1 a = 0 a = 0 b = 1 => x = 0 + 1 = 1 y = 0 + 1 = 1 z = 0 + 1 = 1 a = 0 a = 0 b = 1

Ответ. Прямые пересекаются в точке с координатами (1, 1, 1).

Решение: Составим систему уравнений заменив во втором уравнении параметр t на a

x = 2 t — 3 y = t z = — t + 2 x = a + 1 y = 3 a — 2 z = 3

Подставим значения x , y , z из 1, 2, 3 уравнений в 4, 5, 6 уравнения

x = 2 t — 3 y = t z = — t + 2 2 t — 3 = a + 1 t = 3 a — 2 — t + 2 = 3 => x = 2 t — 3 y = t z = — t + 2 2 t = a + 4 t = 3 a — 2 t = -1 =>

Подставим значение t из шестого уравнения в остальные уравнения

x = 2·(-1) — 3 y = (-1) z = -(-1) + 2 2·(-1) = a + 4 -1 = 3 a — 2 t = -1 => x = -5 y = -1 z = 3 a = -6 a = 1 3 t = -1

Ответ. Так как -6 ≠ 1 3 , то прямые не пересекаются.

Пересечение прямых, угол и координаты пересечения

IP76 > Пересечение прямых, угол и координаты пересечения

Не такая тривиальная задача, скажу я вам. Всякий раз, когда возникает необходимость посчитать координату пересечения пары прямых, каждая из которых задана парой точек, снова беру блокнот и вывожу пару формул. И всякий раз – блин, ну это уже когда-то было, опять надо что-то делать с параллельными прямыми, опять появляется пакостная строго вертикальна линия, когда на (x1-x2) никак не разделить и т.д.

Поэтому – в подборку теории и практики, пригодится, сэкономим блокнот, спасем дерево.

Коэффициенты А, B, C

Все помним со школы формулу:

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

Те же фаберже, только сбоку.

В теории надо составить и решить систему уравнений для первой и второй линии, где переменными будут X и Y точки пересечения.

Загвоздка в том, что мы не знаем коэффициенты для обеих линий.

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

Путем несложных операций приходим к следующей записи:

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

Пока все идет отлично, нигде вероятного деления на ноль не встретилось.

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

Система уравнений

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

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

Сразу же запишем метод под нашу систему.

Имеем следующую систему:

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

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

Практика 1

Частные случаи

  • Прямые параллельны: ∆ab = 0
    • (A1B2 – B1A2 = 0);
  • Прямые совпадают: ∆ab = ∆X = ∆Y = 0
    • (A1B2 – B1A2 = 0) И (A1C2 — A2C1 = 0) И (C1B2 -B1C2 = 0);
  • Прямые перпендикулярны:
    • (A1 A2 + B1 B2 = 0).

Рис.2. Пересечение перпендикулярных прямых Рис.3. Параллельные прямые не пересекаются

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

В общем случае, чтобы определить принадлежность точки отрезку, надо установить две вещи:

  1. Точка принадлежит прямой, проходящей через конечные точки отрезка. Для этого достаточно подставить значение X и Y в уравнение прямой и проверить получившееся равенство. В нашем случае, этот пункт уже выполнен, т.к. точка пересечения априори принадлежит обеим прямым.
  2. Проверить факт нахождения точки между концами отрезка.

Займемся пунктом 2. Данный факт можно установить двумя способами:

  • Логически, т.е. (x1 = x >= x2). На случай «вертикальности» линии добавить проверку на Y:
    • (y1 = y >= y2).
  • Арифметически. Сумма отрезков |x-x1| + |x-x2| должна быть равна длине отрезка |x1-x2|. Аналогично, на случай «вертикальности» , добавить проверку:
    • |y-y1| + |y-y2| = |y1-y2|

Практика показывает, что арифметический способ быстрее примерно в 3 раза. Когда-то я считал, что операции сравнения самые быстрые. Это давно уже не так.

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

Угол пересечения прямых

Угол пересечения прямых — это угол пересечения направляющих векторов. Т.е., взяв уже знакомые ранее точки p1 и p2, получим направляющий вектор V(p1,p2), и аналогично второй вектор M(p3,p4). В теории мы должны вычислить достаточно «затратную» функцию, с корнями, квадратами, дробями и арккосинусом.

Давайте не будем останавливаться на ней, она долгая, нудная и в нашем случае ненужная. Рассмотрим вектор:

Рис.4. Вектор V(p1,p2)

α — угол наклона вектора к оси X, который можно найти, как:

Что-то знакомое? Да это ни что иное, как коэффициенты в уравнении прямой от образованных фанатов. Может они и правы в своем испепеляющем фанатизме…

Одним словом, коэффициенты (расстояния) у нас уже есть по обеим прямым.

Рис.5. Пересекающиеся вектор V(p1,p2) и вектор M(p3,p4)

Судя по рисунку, угол между векторами, это сумма углов наклона векторов к оси X. Ммм… не совсем так, на самом деле это разность.

Рис.6. Пересекающиеся векторы в положительной Y

По рисунку явно видно, что угол между векторам это γ = (βα).

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

От теории к практике

Теперь в плане практического применения. Мне нужно точно знать, откуда, куда и в каком направлении этот угол. В теории, углом между прямыми считается наименьший из пары γ и (180-γ). Так вот, нам это не надо. Какой угол получится – такой нам и нужен.

Поэтому, под углом между векторами понимаем угол от вектора V(p1,p2) к вектору M(p3,p4). Если знак угла – отрицательный, понимаем, что он против часовой стрелки, иначе – по часовой стрелке.

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


источники:

http://ru.onlinemschool.com/math/library/analytic_geometry/lines_intersection/

http://ip76.ru/theory-and-practice/cross-lines/