Точки пересечения линии и прямоугольника - PullRequest
7 голосов
/ 26 августа 2010

Schematic

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

Новая линия, параллельная R, определяется расстоянием L от R (возьмем A, B и C в качестве примеров). Я хотел бы выяснить точки, где новая линия пересекает прямоугольник (например, P1 и P2 для линии A, P3 и P4 для B и P5 и P6 для C).

Как лучше всего его найти?

Ответы [ 2 ]

4 голосов
/ 26 августа 2010

Используйте эту страницу http://local.wasp.uwa.edu.au/~pbourke/geometry/lineline2d/

это дает формулу для пересечения двух линий. Пересечь каждую из 4 линий, которые составляют прямоугольник отдельно, а затем проверить, что u_a (место пересечения, параметризованное линией прямоугольника) находится между правильными границами, чтобы убедиться, что ваша линия не пересекает его за пределами прямоугольника.

Обратите внимание, что для этого вам понадобятся фактические точки, а не углы, но их очень легко вычислить. Линия, проходящая через начало координат, просто (0,0) -> (cos (a), sin (a))

Линия х расстояние от нее, параллель (0,0) + x * (sin (a), - cos (a)) -> (cos (a), sin (a)) + x * (sin (a), - cos (a))

потому что, как вы можете заметить, (sin (a), -cos (a)) - это просто вектор единичной длины, перпендикулярный вашей линии, поэтому вы просто добавляете его поверх обеих точек, образующих исходную линию.

1 голос
/ 26 августа 2010
  1. зная R (x) и расстояние L, вы можете легко получить функцию для B (x)
  2. можно представить в виде 4 строк, то есть 4 простых функций R1 (x), R2 (x), R3 (x), R4 (x)
  3. вам нужно решить 4 комбинированных уравнения: {A (x); R1 (x)}, {A (x); R2 (x)} и т. Д.
  4. проверка найденных пересечений с линиями, находятся ли они в границах прямоугольника, используя базовую точку, ширину и высоту прямоугольника (и угол наклона в общем случае)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...