Как проверить, находится ли какая-либо точка (или часть) линии внутри или касается прямоугольника - PullRequest
9 голосов
/ 28 января 2011

Я хочу проверить, находится ли линия (или любая точка линии) внутри прямоугольника или пересекает прямоугольник.

У меня есть (x0, y0) и (x1, y1) как начало и конецточки линии.Также (ax, ay) и (bx, by) как верхняя левая и нижняя правая точки прямоугольника

Например,

     ____________
    |            |
 ---|-----       |    Result: true
    |            |
    |____________|

    /
  _/__________
 |/           |
 /            |      Result: true
/|            |
 |____________|


     ____________
    |            |
    |   -------- |   Result: true
    |            |
    |____________|    ----------     Result: false

Может кто-нибудь подсказать, как это сделатьэтот?Я не хочу знать, в чем дело, я просто хочу знать, есть ли он там или нет.

Большое спасибо за помощь

1 Ответ

5 голосов
/ 28 января 2011

Первый и третий случаи тривиальны - просто верните true, если любая из конечных точек линии находится внутри прямоугольника (т.е.> ax и ay,

Второе представляет проблему - мы больше не можем полагаться на конечные точки нашей линии. В этом случае нам нужно будет проверить линию с каждым ребром прямоугольника.

Уравнение для нашей линии будет (x1 - x0)*x + (y1 - y0)*y + x0*y0 - x1*y1 = 0, и мы можем построить аналогичное уравнение для каждой стороны прямоугольника, используя углы. После этого подстановка уравнения для сторон прямоугольника в нашу линию даст нам пересечение.

Наконец, мы проверяем, чтобы точка находилась в границах стороны прямоугольника, а также в рассматриваемом отрезке линии.

Более подробное описание этого содержится в этом обсуждении .

...