math - unitario - vector normal formula
¿Cómo calculo el vector normal de un segmento de línea? (4)
Supongamos que tengo un segmento de línea que va de (x1, y1) a (x2, y2). ¿Cómo calculo el vector normal perpendicular a la línea?
Puedo encontrar muchas cosas sobre hacer esto para aviones en 3D, pero no en 2D.
Por favor, aprenda las matemáticas (los enlaces a ejemplos, diagramas o algoritmos trabajados son bienvenidos), soy un programador más de lo que soy matemático;)
Esta pregunta se publicó hace mucho tiempo, pero encontré una forma alternativa de responderla. Así que decidí compartirlo aquí.
En primer lugar, uno debe saber que: si dos vectores son perpendiculares, su producto de puntos es igual a cero.
El vector normal (x'',y'')
es perpendicular a la línea que conecta (x1,y1)
y (x2,y2)
. Esta línea tiene dirección (x2-x1,y2-y1)
, o (dx,dy)
.
Asi que,
(x'',y'').(dx,dy) = 0
x''.dx + y''.dy = 0
Hay muchos pares (x '', y'') que satisfacen la ecuación anterior. Pero el mejor par que SIEMPRE satisface es (dy,-dx)
o (-dy,dx)
Otra forma de pensarlo es calcular el vector unitario para una dirección dada y luego aplicar una rotación de 90 grados en sentido antihorario para obtener el vector normal.
La representación matricial de la transformación 2D general tiene el siguiente aspecto:
x'' = x cos(t) - y sin(t)
y'' = x sin(t) + y cos(t)
donde (x, y) son los componentes del vector original y (x '', y'') son los componentes transformados.
Si t = 90 grados, entonces cos (90) = 0 y sen (90) = 1. Sustituirlo y multiplicarlo da:
x'' = -y
y'' = +x
El mismo resultado que el anterior, pero con un poco más de explicación sobre de dónde viene.
si definimos dx = x2-x1 y dy = y2-y1, entonces las normales son (-dy, dx) y (dy, -dx).
Tenga en cuenta que no se requiere división, por lo que no corre el riesgo de dividir por cero.
m1 = (y2 - y1) / (x2 - x1)
si son dos líneas perpendiculares:
m1*m2 = -1
entonces
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 es algo si quieres pasarlo desde un punto que definiste