Re: пересечение линии и прямоугольника
От: conraddk Россия  
Дата: 14.05.04 16:57
Оценка: 4 (2)
Здравствуйте, Holms, Вы писали:

H>дан отрезок линии двумя точками

H>также есть прямоугольник заданый верхней-левой и правой-нижней точками
H>надо узнать пересекается ли данный отрезок с премоугольником или нет.
Не совсем понятно, что значит "пересекается". Если отрезок лежит полностью внутри прямоугольника, он пересекается с этим прямоугольником?

"Лобовое" решение:
1. Построить уравнение прямой, содержащей отрезок в виде Ax+By+C=0.
Уравнение прямой, проходящей через точки (x1,y1) и (x2, y2) задается так:
x-x1    y-y1
----- = -----
x2-x1   y2-y1
Тогда
(x-x1)*(y2-y1)=(y-y1)*(x2-x1)
x*(y2-y1)-x1*(y2-y1)=y*(x2-x1)-y1*(x2-x1)
x*(y2-y1)+y*(x1-x2)-x1*(y2-y1)+y1*(x2-x1)=0

Получается A=y2-y1, B=x1-x2, C=-x1*(y2-y1)+y1*(x2-x1).
2. Проверить для каждой стороны прямоугольника
а) пересечение прямой, содержащей отрезок, со стороной
б) пересечение отрезка с прямой, содержащей сторону

Проверяется просто: пусть нам надо проверить пересечение прямой Ax+By+C=0 и отрезка (x1,y1)-(x2,y2). Если
(Ax1+By1+C)*(Ax2+By2+C)<0,
то прямая пересекает отрезок.

Если для какой-то из сторон это выполняется, то пересечение есть.

Если надо, проверку попадания отрезка внутрь прямоугольника, думаю, проверить несложно
... << RSDN@Home 1.1.3 stable >>
Все на свете должно происходить медленно и неправильно...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.