Ответ 1
если мы определим dx = x2-x1 и dy = y2-y1, то нормали будут (-dy, dx) и (dy, -dx).
Обратите внимание, что никакого деления не требуется, и поэтому вы не рискуете делить на ноль.
Предположим, что у меня есть отрезок линии, идущий от (x1, y1) до (x2, y2). Как вычислить нормальный вектор, перпендикулярный линии?
Я могу найти много вещей о том, как это сделать для самолетов в 3D, но не для 2D-материалов.
Прошу простенько по математике (ссылки на обработанные примеры, диаграммы или алгоритмы приветствуются), я программист больше, чем математик;)
если мы определим dx = x2-x1 и dy = y2-y1, то нормали будут (-dy, dx) и (dy, -dx).
Обратите внимание, что никакого деления не требуется, и поэтому вы не рискуете делить на ноль.
Другой способ думать об этом - рассчитать единичный вектор для данного направления, а затем применить поворот на 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
Тот же результат, что и ранее, но с меньшим количеством объяснений относительно того, откуда он исходит.
Этот вопрос был опубликован много лет назад, но я нашел альтернативный способ ответить на него. Поэтому я решил поделиться им здесь.
Во-первых, нужно знать, что: если два вектора перпендикулярны, их точечный продукт равен нулю.
Нормальный вектор (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 - это что-то, если вы хотите передать его из определенной вами точки.