Как рассчитать вектор нормали отрезка? - PullRequest
162 голосов
/ 07 августа 2009

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

Я могу найти много материала об этом для самолетов в 3D, но без 2D.

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

Ответы [ 4 ]

216 голосов
/ 07 августа 2009

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

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

86 голосов
/ 10 августа 2009

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

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

11 голосов
/ 27 апреля 2014

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

7 голосов
/ 07 августа 2009
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 - это что-то, если вы хотите передать это из точки, которую вы определили

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...