Предположим, у меня есть отрезок, идущий от (x1, y1) к (x2, y2). Как рассчитать вектор нормали, перпендикулярный линии?
Я могу найти много материала о том, как сделать это для самолетов в 3D, но нет материала 2D.
Пожалуйста, не стесняйтесь в математике (ссылки на проработанные примеры, диаграммы или алгоритмы приветствуются), я программист больше, чем математик;)
Ответы:
если мы определим dx = x2-x1 и dy = y2-y1, то нормалями будут (-dy, dx) и (dy, -dx).
Обратите внимание, что деление не требуется, и поэтому вы не рискуете делить на ноль.
источник
(x', y') = (-y, x)
и(x', y') = (y, -x)
вроде бы прав, но зачем бы тутdx
иdy
здесь. Более того, исходя из уклонов,m1 * m2 = -1
для прямых угловых линий, отсюдаdy' = dx' * (-dx/dy)
иdx' = dy' * (-dy/dx)
как получается ваше уравнениеnormal.x = x' = -dy
?Другой способ думать об этом - вычислить единичный вектор для заданного направления, а затем применить поворот на 90 градусов против часовой стрелки, чтобы получить вектор нормали.
Матричное представление общего 2D-преобразования выглядит так:
где (x, y) - компоненты исходного вектора, а (x ', y') - преобразованные компоненты.
Если t = 90 градусов, то cos (90) = 0 и sin (90) = 1. Подставляя и умножая его, получаем:
Тот же результат, что и ранее, но с небольшим объяснением того, откуда он берется.
источник
Этот вопрос был опубликован давно, но я нашел альтернативный способ ответить на него. Поэтому я решил поделиться этим здесь.
Во-первых, нужно знать, что: если два вектора перпендикулярны, их скалярное произведение равно нулю.
Вектор нормали
(x',y')
перпендикулярен линии, соединяющей(x1,y1)
и(x2,y2)
. Эта линия имеет направление(x2-x1,y2-y1)
, или(dx,dy)
.Так,
Существует множество пар (x ', y'), которые удовлетворяют приведенному выше уравнению. Но лучшая пара , которая всегда удовлетворяет либо
(dy,-dx)
или(-dy,dx)
источник
если перпендикулярно две линии:
затем
b - это что-то, если вы хотите передать его из точки, которую вы определили
источник