Как вычислить нормальный вектор отрезка?

предположим,что у меня есть отрезок линии,идущий от (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-это что-то, если вы хотите передать его из точки, которую вы определили