Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Проверка пересечения отрезка и квадрата

zagzi Ученик (201), закрыт 13 лет назад
Собственно вопрос в том как это сделать? И мне ненужны отрывки чегото кода....этого в нети навалом. Обьясните на пальцах. У меня есть отрезок "x1_y1- x2_y2" и точька (x3_y3)... точька (x3_y3) смысли квадрат (верхняя левая точька (x3+25)_(y3+25) | нижняя правая точька (x3-25)_(y3-25)).
Я надеюсь я нормально обьяснил что хочу.
Дополнен 13 лет назад
ну вот напутал.... так: (верхняя левая точька (x3-25)_(y3-25) | нижняя правая точька (x3+25)_(y3+25))
Дополнен 13 лет назад
я незнаю как проверять пересечение отрезка с отрезком. Впринцепе это я и хочу узнать.
Дополнен 13 лет назад
Все очень просто!
х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.
Дополнен 13 лет назад
Дополнен 13 лет назад
Ктонибуть может пояснить это? А то автор того явно переборщил с простатой. Как я основываясь на этом код писать буду? я нечё непонял что он обьяснял.. . что это за "x" и "y" что это за первое уравнение и второе...
Лучший ответ
oaobv Просветленный (27590) 13 лет назад
Если хотите получать нормальные ответы, то пишите без ошибок хотя бы. А то в последней приписке написали про какую-то "простАту". Откуда здесь, в аналитической геометрии, мочевыводная система?
В целом: есть отрезок, есть квадрат. Квадрат (как можно понять из условия) рассматривается в виде контура, а точнее - в виде четырёх отрезков, соединяющих вершины.
Первый метод проверки пересечения - если две линии (отрезка) пересекаются, то у них должна быть общая точка. То есть принадлежащая одновременно обеим отрезкам.
Второй метод (угловых коэффициентов прямых на плоскости (как бы от обратного) . Смысл в том, что если линии не пересекаются, то они параллельны. По математически это означает, что у них одинаковый угол наклона в некой системе координат. Вот и высчитываются углы.
Остальные ответы
Капитан Гугл Искусственный Интеллект (146193) 13 лет назад
Надо проверить пересечение отрезка со всеми 4-мя сторонами, т. е. найти точку пересечения прямых и посмотреть, попадает ли она на оба отрезка, 4 раза (ну или до первого совпадения) . Ничего принципиально проще нет.
Похожие вопросы