Как вычислить нормальный вектор отрезка?
предположим,что у меня есть отрезок линии,идущий от (x1, y1) до (x2, y2). Как вычислить нормальный вектор, перпендикулярный линии?
Я могу найти много вещей о том, как это сделать для самолетов в 3D,но не 2D.
пожалуйста, полегче с математикой (ссылки на отработанные примеры, диаграммы или алгоритмы приветствуются), я программист больше, чем математик;)
4 ответов
Если мы определим dx=x2-x1 и dy=y2-y1, то нормали будут (- dy, dx) и (dy, - dx).
обратите внимание, что деление не требуется, и поэтому вы не рискуете делением на ноль.
другой способ подумать об этом-вычислить единичный вектор для данного направления, а затем применить 90-градусное вращение против часовой стрелки, чтобы получить нормальный вектор.
матричное представление общего 2D-преобразования выглядит следующим образом:
x' = x cos(t) - y sin(t)
y' = x sin(t) + y cos(t)
где (x,y) - компоненты исходного вектора и (x', y') - преобразованные компоненты.
Если t = 90 градусов, то cos (90) = 0 и sin(90) = 1. Подстановка и умножение дает:
x' = -y
y' = +x
тот же результат, что и ранее, но с немного большим объяснением того, откуда он берется.
этот вопрос был размещен давно, но я нашел альтернативный способ ответить на него. Поэтому я решил поделиться им здесь.
Во-первых, надо знать, что: если два вектора перпендикулярны, то их скалярное произведение равно нулю.
Нормальный вектор (x',y')
перпендикулярно линии, соединяющей (x1,y1)
и (x2,y2)
. Эта линия имеет направление (x2-x1,y2-y1)
или (dx,dy)
.
Итак,
(x',y').(dx,dy) = 0
x'.dx + y'.dy = 0
множество пар (x', y'), удовлетворяющих приведенному выше уравнению. Но лучше пара, которая всегда удовлетворяет, либо (dy,-dx)
или (-dy,dx)
m1 = (y2 - y1) / (x2 - x1)
Если перпендикулярно две строки:
m1*m2 = -1
затем
m2 = -1 / m1 //if (m1 == 0, then your line should have an equation like x = b)
y = m2*x + b //b is offset of new perpendicular line..
b-это что-то, если вы хотите передать его из точки, которую вы определили