Пересечение (евклидова геометрия)
Пересечение в евклидовой геометрии — точка или кривая, общие для двух или более объектов (таких как кривые, плоскости и поверхности). Простейший случай — пересечение двух различных прямых на плоскости, которое либо является одной точкой, либо не существует, если прямые параллельные.
![](http://upload.wikimedia.org/wikipedia/commons/thumb/5/55/Schnittpunkt-2g.svg/200px-Schnittpunkt-2g.svg.png)
Задача нахождения пересечения плоскостей — двумерных линейных геометрических объектов, встроенных в многомерное пространство — сводится к решению системы линейных уравнений.
В общем случае, пересечение определяется системой нелинейных уравнений, которая може быть решена численно, например, с использованием метода Ньютона. Задачи о пересечении прямой и конического сечения (круг, эллипс, парабола и т. д. ) или квадрики (сфера, цилиндр, гиперболоид и т. д. ) приводят к квадратным уравнениям, которые легко решаются. Пересечения между квадриками приводят к уравнениям четвёртой степени, которые можно решить алгебраически.
На плоскости
[править | править код]Две линии
[править | править код]Для определения точки пересечения двух непараллельных прямых:
можно использовать, например, правило Крамера, или подставляя переменную, координаты точки пересечения :
- .
(Если , то эти линии параллельны, а это значит, что эти формулы нельзя использовать, так как они предполагают деление на 0.)
Два отрезка
[править | править код]![](http://upload.wikimedia.org/wikipedia/commons/thumb/d/d7/Is-linesegm.svg/300px-Is-linesegm.svg.png)
Для двух непараллельных линейных отрезков и эта точка не обязательно является точкой пересечения (см. диаграмму), потому что точка пересечения соответствующих линий не обязательно должна содержаться в линейных отрезках. Для проверки ситуации используются параметрические представления линий:
Отрезки пересекаются только в общей точке соответствующих линий, если соответствующие параметры удовлетворяют условию . Параметры являются решением линейной системы
Его можно решить для s и t с помощью правила Крамера (см. выше). Если выполняется условие , то вставляется или в соответствующее параметрическое представление и получается точка пересечения .
Пример: Для отрезков и получается линейная система
и . Это означает: линии пересекаются в точке .
Примечание: Рассматривая прямые, а не отрезки, определяемые парами точек, каждое условие может быть опущено, и метод даёт точку пересечения линий (см. выше).
![](http://upload.wikimedia.org/wikipedia/commons/thumb/9/97/Is-circle-line-s.svg/220px-Is-circle-line-s.svg.png)
Линия и круг
[править | править код]Для пересечения отрезка и окружности решают линейное уравнение для x или y и подставляют в уравнение окружности и получают решение (используя формулу квадратного уравнения) с:
- ,
- ,
если . Если это условие выполняется со строгим неравенством, то существуют две точки пересечения; в этом случае прямая называется секущей линией окружности, а отрезок прямой, соединяющий точки пересечения, называется хордой окружности.
Если выполняется , то существует только одна точка пересечения и прямая касается окружности. Если слабое неравенство не выполняется, линия не пересекает окружность.
Если середина круга не является началом координат[1], можно рассматривать пересечение прямой и параболы или гиперболы.
Две окружности
[править | править код]Определение точек пересечения двух окружностей:
сводится к предыдущему случаю пересечения прямой и окружности. Путём вычитания двух данных уравнений получается линейное уравнение:
Эта особая линия является радикальной осью двух окружностей.
![](http://upload.wikimedia.org/wikipedia/commons/thumb/7/7c/Is-circle-circle-2x.svg/260px-Is-circle-circle-2x.svg.png)
Особый случай ; в этом случае начало координат — это центр первого круга, а второй центр лежит на оси абсцисс (см. диаграмму[уточнить]). Уравнение радикальной прямой упрощается до: а точки пересечения можно записать как с
В случае окружности не имеют общих точек.
В случае окружности имеют одну общую точку, а радикальная ось является общей касательной.
Любой общий случай, как написано выше, можно превратить сдвигом и поворотом в частный случай.
Пересечение двух кругов (внутренности двух окружностей) образует форму, называемую линзой[англ.].
![](http://upload.wikimedia.org/wikipedia/commons/thumb/5/5a/Is-circle-ellipse-s.svg/220px-Is-circle-ellipse-s.svg.png)
Два конических сечения
[править | править код]Задача пересечения эллипса, гиперболы, параболы с другим коническим сечением сводится к системе квадратных уравнений, которую в частных случаях легко решить, исключив одну координату. Специальные свойства конических сечений могут быть использованы для получения решения. В общем, точки пересечения могут быть определены путём решения уравнения с помощью итерации Ньютона. Если а) обе коники заданы неявно (посредством уравнения), необходима двумерная итерация Ньютона; б) одна неявно, а другая параметрически — необходимо, чтобы была задана 1-мерная итерация Ньютона.
Две плавные кривые
[править | править код]![](http://upload.wikimedia.org/wikipedia/commons/thumb/3/36/Schnittp2d-transv-s.svg/250px-Schnittp2d-transv-s.svg.png)
![](http://upload.wikimedia.org/wikipedia/commons/thumb/f/f7/Beruehr-schnitt-s.svg/350px-Beruehr-schnitt-s.svg.png)
Две кривые в (двумерном пространстве), которые непрерывно дифференцируемы (то есть нет резкого изгиба), имеют точку пересечения, если они имеют общую точку плоскости и имеют в этой точке
- a: разные касательные (трансверсальное пересечение) или
- b: касательная линия общая, и они пересекают друг друга (касание пересечения, см. диаграмму).
Если обе кривые имеют общую точку S и касательную, но не пересекают друг друга, они просто «касаются» в точке S.
Поскольку касания пересечений возникают редко и с ними трудно справиться, следующие соображения не учитывают этот случай. В любом случае ниже предполагаются все необходимые дифференциальные условия. Определение точек пересечения всегда приводит к одному или двум нелинейным уравнениям, которые можно решить с помощью итерации Ньютона. Список возникающих случаев следующий:
![](http://upload.wikimedia.org/wikipedia/commons/thumb/d/d1/Schnittp2d-pi-s.svg/220px-Schnittp2d-pi-s.svg.png)
![](http://upload.wikimedia.org/wikipedia/commons/thumb/1/1d/Schnittp2d-ii-s.svg/220px-Schnittp2d-ii-s.svg.png)
- Если заданы обе кривые явно: , приравнивание их даёт уравнение
- Если заданы обе кривые параметрически:
- Приравнивая их, получаем два уравнения с двумя переменными:
- Если заданы одна кривая параметрически, а другая неявно:
- Это простейший случай помимо явного. Нужно вставить параметрическое представление в уравнение кривой , и получится уравнение:
- Если заданы обе кривые неявно:
- Здесь точка пересечения — это решение системы
Любая итерация Ньютона требует удобных начальных значений, которые можно получить, визуализировав обе кривые. Параметрически или явно заданная кривая может быть легко визуализирована, потому что для любого параметра t или x соответственно легко вычислить соответствующую точку. Для неявно заданных кривых эта задача не так проста. В этом случае необходимо определить точку кривой с помощью начальных значений и итерации[2].
Примеры:
- 1: и окружность (см диаграмму).
- Итерация Ньютона для функции
- должна быть выполнена. В качестве начальных значений можно выбрать −1 и 1.5.
- Точки пересечения: (−1.1073, −1.3578), (1.6011, 4.1046)
- Итерация Ньютона для функции
- 2:
- (см диаграмму).
- Итерация Ньютона
- должна быть выполнена, где является решением линейной системы
- в точке . В качестве начальных значений можно выбрать (−0.5, 1) и (1, −0.5).
- Линейная система может быть решена по правилу Крамера.
- Точками пересечения являются (−0.3686, 0.9953) и (0.9953, −0.3686).
Два многоугольника
[править | править код]![](http://upload.wikimedia.org/wikipedia/commons/thumb/b/b6/Is-polygpolyg-s.svg/300px-Is-polygpolyg-s.svg.png)
Если кто-то хочет определить точки пересечения двух многоугольников, можно проверить пересечение любой пары линейных сегментов многоугольников (см. выше). Для многоугольников с большим количеством сегментов этот метод довольно трудоёмок. На практике алгоритм пересечения ускоряется с помощью оконных тестов. В этом случае можно разделить многоугольники на маленькие подполигоны и определить наименьшее окно (прямоугольник со сторонами, параллельными осям координат) для любого подполигона. Перед началом трудоёмкого определения точки пересечения двух отрезков линии любая пара окон проверяется на наличие общих точек[3]
В пространстве (три измерения)
[править | править код]В трёхмерном пространстве есть точки пересечения (общие точки) между кривыми и поверхностями. В следующих разделах мы рассматриваем только трансверсальное пересечение.
Линия и плоскость
[править | править код]![](http://upload.wikimedia.org/wikipedia/commons/thumb/9/9f/Schnittp-ger-eb-s.svg/220px-Schnittp-ger-eb-s.svg.png)
Пересечение прямой и плоскости в общем положении в трёх измерениях является точкой.
Обычно линия в пространстве представляется параметрически , а плоскость — уравнением . Вставка представления параметра в уравнение даёт линейное уравнение
для параметра точки пересечения .
Если линейное уравнение не имеет решения, либо прямая лежит на плоскости, либо параллельна ей.
'x1,y1,z1, x2,y2,z2, x3,y3,z3 - координаты заданной плоскости
'x4,y4,z4, x5,y5,z5 - координаты заданной прямой
'Коэффициенты для уравнения плоскости
A = y1*(z2 - z3) + y2*(z3 - z1) + y3*(z1 - z2)
B = z1*(x2 - x3) + z2*(x3 - x1) + z3*(x1 - x2)
C = x1*(y2 - y3) + x2*(y3 - y1) + x3*(y1 - y2)
D = -1*(x1*(y2*z3 - y3*z2) + x2*(y3*z1 - y1*z3) + x3*(y1*z2 - y2*z1))
'Нормальный вектор к заданной плоскости
xN = A
yN = B
zN = C
'Вспомогательный вектор
xV = x1-x4
yV = y1-y4
zV = z1-z4
'Расстояние до плоскости по нормали
dist1 = xN*xV + yN*yV + zN*zV
'Вспомогательный вектор
xW = x5-x4
yW = y5-y4
zW = z5-z4
'Приближение к плоскости по нормали
dist2 = xN*xW + yN*yW + zN*zW
'Проверка на параллельность
IF dist1 <> 0 THEN 'Прямая не принадлежит плоскости
IF dist2 <> 0 THEN 'Прямая не параллельна плоскости
'Вспомогательное отношение
ratio = dist1/dist2
'Вспомогательный вектор
xW = xW*ratio
yW = yW*ratio
zW = zW*ratio
'Искомые координаты
x0 = x4 + xW
y0 = y4 + yW
z0 = z4 + zW
END IF
END IF
Три плоскости
[править | править код]Если линия определяется двумя пересекающимися плоскостями и должна пересекаться третьей плоскостью , необходимо оценить общую точку пересечения трёх плоскостей.
Три плоскости с линейно независимыми нормальными векторами имеют точку пересечения
Для доказательства следует установить используя правила тройного скалярного произведения. Если тройное скалярное произведение равно 0, то плоскости либо не имеют тройного пересечения, либо это прямая (или плоскость, если все три плоскости одинаковы).
Кривая и поверхность
[править | править код]![](http://upload.wikimedia.org/wikipedia/commons/thumb/9/95/Is-pcurve-isurface-s.svg/250px-Is-pcurve-isurface-s.svg.png)
с поверхностью
Аналогично плоскому случаю следующие случаи приводят к нелинейным системам, которые могут быть решены с использованием 1- или 3-мерной итерации Ньютона[4]:
- параметрическая кривая и
- параметрическая поверхность
- параметрическая кривая и
- неявная поверхность
Пример:
- параметрическая кривая и
- неявная поверхность (см. рисунок).
- Точки пересечения: (−0.8587, 0.7374, −0.6332), (0.8587, 0.7374, 0.6332).
Пересечение линии и сферы[англ.] — это частный случай.
Как и в случае линии и плоскости, пересечение кривой и поверхности в общем положении состоит из дискретных точек, но кривая может частично или полностью содержаться на поверхности.
Прямая и многогранник
[править | править код]Две поверхности
[править | править код]Две трансверсально пересекающиеся поверхности дают кривую пересечения[англ.]. Самый простой случай — линия пересечения двух непараллельных плоскостей.
Примечания
[править | править код]- ↑ Хартманн, 2003, p. 17.
- ↑ Хартманн, 2003, p. 33.
- ↑ Хартманн, 2003, p. 79.
- ↑ Хартманн, 2003, p. 93.
Литература
[править | править код]- Erich Hartmann. Geometry and Algorithms for Computer Aided Design. — Darmstadt University of Technology, 2003.
Для улучшения этой статьи желательно:
|