Здравствуйте, 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 >>