Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Алгоритмы > пересечение прямой и треугольника


Автор: antoniobanderas 7.10.2006, 12:23
как найти точку пересечения?

Автор: Kuvaldis 7.10.2006, 13:37
antoniobanderas
Если все задано в координатах,
то:
1. ищешь точку пересечения прямой с прямыми, содержащими стороны треугольника. Если неудача, то просто выбираешь, другую прямую. (прямые могут быть параллельные, пересечения с этой не будет)
Это делается через решение системы двух уравнений.
например, исходная прямая AX + BY +C = 0 (1)
прямая, содержащая сторону:
уравнение прямой, проходящей через 2 точки
(Х - Х0) / (X1 - X0) = (Y - Y0) / (Y1 - Y0),  где (X0, Y0) - одна точка (вершина треугольника), (Х1. Y1) - другая.
получаем прямую A1 X = B1Y + C1 = 0 (2)

Решаем систему (1), (2), находим точку пересечения

2. Проверить, принадлежит ли найденная точка стороне треугольника, она лежит, на ПРЯМОЙ, а нас интересует отрезок
Проверка: координата Х найденной точки должна быть между X0 и X1 (элементарно, Ватсон)

Вроде все, осталось только реализовать



 

Автор: antoniobanderas 7.10.2006, 13:50
спасибо конечно но я имел ввиду нахождение точки пересечения прямой с тругольком в трехмерном пространстве (для рейтрейсинга)

Автор: ivashkanet 7.10.2006, 14:25
Цитата(antoniobanderas @  7.10.2006,  13:50 Найти цитируемый пост)
в трехмерном пространстве

Так что сразу не сазал?  smile 
Это ж ведь очень важно   smile 

Тогда поступаем так:

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

1) если прямая и плоскость трейгольника не паралельны, то ищем их точку пересечения (она одна) и последлвательно подставляем в уравнение сторон треугольника и "Проверить, принадлежит ли найденная точка стороне треугольника, она лежит, на ПРЯМОЙ, а нас интересует отрезок 
Проверка: координата Х найденной точки должна быть между X0 и X1 (элементарно, Ватсон)"

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

Добавлено @ 14:27 
antoniobanderas, только не говори теперь, что тебе нужно пересечение со всем "телом" треугольника  smile 
Если так, то в 1) нужно составить сисему неравенств для этого треугольника и проверить найденную точку на удовлетворение ему

Добавлено @ 14:28 
 smile 
Цитата(ivashkanet @  7.10.2006,  14:25 Найти цитируемый пост)
на удовлетворение ему

 smile  smile  smile 

Автор: antoniobanderas 7.10.2006, 14:34
а как найти саму точку пересечения прямой и плоскости?

Автор: ivashkanet 7.10.2006, 14:38
Цитата(antoniobanderas @  7.10.2006,  14:34 Найти цитируемый пост)
а как найти саму точку пересечения прямой и плоскости?

Решить систему из уравнений прямой и плоскости (уравнение прямой в 3Д -- система двух уравнений плоскостей).

Автор: Ashlander 23.11.2006, 17:41
Здравствуйте ...в продолжение темы, вопрос

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

один из вариантов решения http://www.gamedev.ru/articles/?id=30123&page=2
учитывая, что отрезок все же не прямая и может не доставать до плоскости... то http://algolist.manual.ru/maths/geom/intersect/lineplain3d.php

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

Решить систему из уравнений прямой и плоскости (уравнение прямой в 3Д -- система двух уравнений плоскостей).

либо в моем случае "взять" еще две точки для формирования этих двух пересекающихся плоскостей... 

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

спасибо

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)