![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Всем доброго времени суток. Давно я тут не появлялся
![]() Сразу хочу извиниться: Итак, сам вопрос: Как определить пересекаются ли 2 отрезка. Но прежде чем меня закидают помидорами, отмечу: я уже решал эту задачу и меня интересует нахождение наиболее эффективного решения. Сейчас у меня есть только одна мысль по этому поводу: Если я ошибся и таким образом нельзя определить пересечение отрезков - просьба сообщить мне об этом. Собственно вопрос заключается в следующем : Какие есть еще способы определения пересечения отрезков? Хотелось бы увидеть менее ресурсоемкие (содержащие меньшее количиство операций) способы. Код необязателен, т.к. все равно будет переписан с нуля. Мне нужен принцип\алгоритм. Я ни в чем никогда не уверен... И в этом тоже... ![]() |
#2
|
||||
|
||||
![]() Пишу программы за еду. __________________ |
#3
|
|||
|
|||
![]() Да, именно о подобном способе я знаю. Спасибо за ссылку. Вопрос остается. Есть ли альтернативные способы решения этой задачи?
С сайта: Цитата:
Я ни в чем никогда не уверен... И в этом тоже... ![]() Последний раз редактировалось Interface, 20.03.2012 в 16:52. |
#4
|
||||
|
||||
![]() Код:
function CollisionLine(LA1,LB1,LA2,LB2:Points):boolean; var v1,v2,v3,v4:double; begin v1:=(lb2.X-la2.X)*(la1.y-la2.y)-(lb2.y-la2.y)*(la1.X-la2.X); v2:=(lb2.X-la2.X)*(lb1.y-la2.y)-(lb2.y-la2.y)*(lb1.X-la2.X); v3:=(lb1.X-la1.X)*(la2.y-la1.y)-(lb1.y-la1.y)*(la2.X-la1.X); v4:=(lb1.X-la1.X)*(lb2.y-la1.y)-(lb1.y-la1.y)*(lb2.X-la1.X); CollisionLine:=(v1*v2<0) and (v3*v4<0); end; где: LA1,LB1 одна линия, соответственно LA2,LB2-вторая |
Этот пользователь сказал Спасибо Pilot_Red за это полезное сообщение: | ||
TennisAdept (12.06.2022)
|