Пересечение между лучом и прямоугольником - PullRequest
2 голосов
/ 03 февраля 2012

В C ++, в 2D, как я могу найти точку пересечения между лучом (определенным одной точкой и вектором направления) и прямоугольником (определенным x, y, w, h)?

                   ________
                  |        |
                  |        |
------------------|        |
                  |________|

Это для некадрового моделирования, поэтому я не совсем уверен, как решить проблему.

Ответы [ 2 ]

5 голосов
/ 03 февраля 2012

Прямоугольник в 2D = 4 отрезка.

Итак, ваш вопрос на самом деле: Как определить, пересекаются ли две линии, и если да, то в какой точке x, y точка?

Вы вычисляете пересечение для всех отрезков, а затем выбираете, закрывает одно на основе |A-Xi|, где A - начало вектора , Xi - точка пересечения и ||представляет длину вектора (sqrt(A.x*Xi.x + A.y*Xi.y), вам на самом деле не нужно использовать sqrt(), если вам просто нужно сравнить расстояния и вам не нужно точное число).

2 голосов
/ 07 февраля 2012

Ваш луч определен как y=px+q. Определяя вашу коробку как {R,B,L=R+w,T=B+h}, это означает, что правый край пересекается в y=pR+q; левый край на y=pL+q, нижний на x=(B-q)/p и верхний на x=(T-q)/p.

Чтобы убедиться, что эти пересечения совпадают с отрезками, определяющими ваш прямоугольник, вам необходимо проверить, что R <=x && x <= L и B <= y && y <= T соответственно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...