Векторные линии внутри прямоугольника - PullRequest
0 голосов
/ 30 ноября 2011

я получил векторную линию (нормализованный вектор vx, vy некоторая точка x0, y0, форма fitLine OpenCv) и прямоугольник, определяемый четырьмя точками (по часовой стрелке p1, p2, p3, p4). Теперь мне нужно знать, проходит ли линия через прямоугольник ... что означает, что должны быть две точки над (или слева от) линии и две точки ниже (или справа от) линии. Как я могу заархивировать это в C ++?

Ответы [ 2 ]

0 голосов
/ 30 ноября 2011

Уравнение вашего вектора

y - y0 = (vy / vx) (x - x0)

Чтобы определить, находится ли точка (x1, y1) выше, на или ниже линии, найдите линию для x1 и сравните y с y1.

 y > y1 - below
 y == y1 - on 
 y < y1 - above

Сравните ваш вектор с каждым углом прямоугольника.

0 голосов
/ 30 ноября 2011

Этот вопрос выглядит как домашнее задание;)

Сначала вам нужно будет описать вашу линию в виде уравнения (1), такого как Ax + By = C.Любая книга по базовой алгебре расскажет вам, как это сделать (или wikipedia ).

Затем вам нужно будет найти аналогичные уравнения для каждого края вашего прямоугольника.Давайте назовем эти уравнения (2), (3), (4) и (5).

Затем вам нужно будет найти пересечение (1) друг с другом уравнениями.Давайте назовем эти точки a, b, c и d.

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

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

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

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