|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
07.03.2009, 15:38 | #1 |
Форумчанин Подтвердите свой е-майл
Регистрация: 27.04.2008
Сообщений: 179
|
Точка пересечения отрезков
Даны координаты начала и конца двух отрезков. Нужно кзнать точку пересечения естих отрезков. Pascal. Спасибо.
www.programmer.uaforums.net - Український форум програмістів.
www.satellite.ipsys.net - Український форум супутникового телебачення. |
07.03.2009, 16:03 | #2 |
Пользователь
Регистрация: 24.03.2008
Сообщений: 31
|
Можно перейти к уравнениям прямых и найти точку пересечения прямых, что сделать очень просто и если точка пересечения будет принадлежать двум отрезкам, то это будет искомая точка, а если нет, то отрезки не пересекаются.
Уравнение прямой на плоскости, проходящей через две заданные точки (x1,y1) и (x2,y2) можно найти так: a=y1-y2 b=x2-x1 c=-(a*x1+b*y1) Для нахождения точки пересечения двух прямых нужно розвязати простую систему уравнений: A1x+B1y+C1=0 и A2x+B2y+C2=0 |
26.06.2010, 18:07 | #3 |
Новичок
Джуниор
Регистрация: 26.06.2010
Сообщений: 1
|
Все очень просто!
х1, у1 и х2,у2 - координаты вершин первого отрезка; х3, у3 и х4,у4 - координаты вершин второго отрезка; для нахождения пересечения составляем уравнения прямых: первое уравнение: (x-x1)/(x2-x1)=(y-y1)/(y2-y1); второе уравнение (x-x3)/(x4-x3)=(y-y3)/(y4-y3); эти уравнения определяют прямую проходящую через две точки, то, что нам и надо. Из этих уравнений находим х и у по следующим формулам: x:=((x1*y2-x2*y1)*(x4-x3)-(x3*y4-x4*y3)*(x2-x1))/((y1-y2)*(x4-x3)-(y3-y4)*(x2-x1)); y:=((y3-y4)*x-(x3*y4-x4*y3))/(x4-x3); так как наши прямые пересекаются, то у них есть общая точка пересечения с координатами (х,у), которую нам и надо найти. для того, чтоб пересечение принадлежало нашим отрезкам, нужно его ограничить, т. е проверить условие: если (((x1<=x)and(x2>=x)and(x3<=x)and(x4 >=x))or((y1<=y)and(y2>=y)and(y3<=y) and(y4>=y))) то существует точка пересечения данных отрезков, а нет – то нет и точки пересечения. Еще следует проверить параллельность этих отрезков при помощи угловых коэффициентов: k1:=(x2-x1)/(y2-y1); k2:=(x4-x3)/(y4-y3); где k1 и k2 – тангенсы угла наклона отрезков к положительному направлению оси ОХ, если k1=k2, то отрезки параллельны, а значит, не имеют точек пересечения. при помощи таких рассуждений можно найти точки пересечения любых многоугольников, зная координаты их вершин. если остались вопросы или нужны исходники программ, пишите на мыло alexander.nestr@mail.ru или в icq 558213677. |
27.05.2011, 00:24 | #4 |
Регистрация: 27.11.2010
Сообщений: 7
|
.....очень интересно,
|
10.08.2011, 23:44 | #5 |
Новичок
Джуниор
Регистрация: 10.08.2011
Сообщений: 1
|
Готовая реализация на с++
Готовая функция.
Код:
|
25.12.2011, 13:15 | #6 | |
Новичок
Джуниор
Регистрация: 25.12.2011
Сообщений: 1
|
Цитата:
Как быть с делением на 0? Поставьте второй отрезок вертикально и и пересчитайте точку - получите DivideByZeroException На C# не катит деление на 0, неужели в С++ подругому? Вопрос 2, как вы входите в первый if, если значения Т неизвестны? Вопрос 3, что за значения Т в esle, нахаляву? Последний раз редактировалось Painy; 25.12.2011 в 13:22. |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Pascal. Площадь пересечения кругов | TOSAgrk | Помощь студентам | 1 | 05.02.2009 04:23 |
"Редактор отрезков" | Oliver | Общие вопросы C/C++ | 3 | 24.12.2008 14:03 |
VB6.0 График зависимости погрешности от количества отрезков интегрирования. | XenoS | Помощь студентам | 1 | 22.05.2008 10:22 |
ActionToolBar. Проблема пересечения компонентов | nimf | Компоненты Delphi | 0 | 18.10.2007 10:42 |
Точка на полигоне? | Роман Радер | Общие вопросы Delphi | 14 | 12.02.2007 17:08 |