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

Предположим, что у меня есть отрезок линии, идущий от (x1, y1) до (x2, y2). Как вычислить нормальный вектор, перпендикулярный линии?

Я могу найти много вещей о том, как это сделать для самолетов в 3D, но не для 2D-материалов.

Прошу простенько по математике (ссылки на обработанные примеры, диаграммы или алгоритмы приветствуются), я программист больше, чем математик;)

Ответ 1

если мы определим dx = x2-x1 и dy = y2-y1, то нормали будут (-dy, dx) и (dy, -dx).

Обратите внимание, что никакого деления не требуется, и поэтому вы не рискуете делить на ноль.

Ответ 2

Другой способ думать об этом - рассчитать единичный вектор для данного направления, а затем применить поворот на 90 градусов против часовой стрелки для получения нормального вектора.

Матричное представление общего двумерного преобразования выглядит следующим образом:

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

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

Ответ 3

Этот вопрос был опубликован много лет назад, но я нашел альтернативный способ ответить на него. Поэтому я решил поделиться им здесь.
Во-первых, нужно знать, что: если два вектора перпендикулярны, их точечный продукт равен нулю. Нормальный вектор (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)

Ответ 4

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