2010-08-26 4 views
5

SchematicТочки пересечения между линией и прямоугольником

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

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

Что является лучшим способом его найти?

+0

Лучший способ, вероятно, http://math.stackexchange.com/ :) – sth

+0

Как определяется L для каждой стороны R? Может ли R иметь отрицательный наклон или альфа всегда 0-90 градусов? – phkahler

ответ

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

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

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

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

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

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

Смежные вопросы