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

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

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

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

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

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

Эта система имеет единственное решение, если Если же то прямые параллельны и не пересекаются.

Пример

Подставляем в первое уравнение системы получаем: Отсюда Поэтому

Ответ: прямые пересекаются в точке

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

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

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

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

Если точка 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

Нахождение точки пересечения двух прямых (и отрезков)

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

image

Популярные способы и их критика

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

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

В поисках более элегантного решения данной проблемы я наткнулся на весьма интересные способы, основанные на векторном умножении ( habr.com/ru/post/267037 ) и ray castinging’е ( ru.wikipedia.org/wiki/Ray_casting#Концепция ). Но на мой взгляд, они неоправданно сложные в вычислительном плане. Поэтому представляю вашему вниманию (и критике) мой способ.

Мой способ

Задача

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

Решение

image

Условные обозначения для исключения недопониманий: a — вектор a, a(y) — проекция вектора a на ось Y, a — вектор a, заданный координатами x1,y1.

Представим наши отрезки в виде двух векторов: a и b. Обратите, внимание, что вектор b имеет противоположное от ожидаемого направление. Введём вектор c. Заметим, что a*k+b*n=c, где k,n — некоторые коэффициенты. Таким образом, получаем систему уравнений:

a(x)*k+b(x)*n=c(x)
a(y)*k+b(y)*n=c(y)
Наша задача сводится к нахождению этих коэффициентов (правда сказать, достаточно найти лишь один из них).

Предлагаю домножить обе части нижнего уравнения на q= -a(x)/a(y). Так после сложения двух уравнений, мы сразу избавимся от k. Нахождение n сведётся к решению обыкновенного линейного уравнения. Важно обратить внимание, что у n может не быть решения.

Внимательный читатель заметит, что при a(y)=0, мы получим ошибку. Пропишем ветвление на этапе нахождения a(y). Этот случай ещё проще, ведь мы сразу получаем уравнение с одной неизвестной.

Рекомендую попробовать вывести n самостоятельно, так будет понятнее, что откуда берётся в коде ниже.

Зная n, можно найти точку пересечения, для этого мы отнимем от координаты точки (x3,y3) вектор b*n

Собираем воедино

Данная функция принимает координаты вершин и возвращает значение 1, если прямые отрезков (именно прямые) пересекаются, иначе 0. Если же вам нужны координаты вершин, вы сможете взять их из массива dot[].

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *