Como faço para calcular o vetor normal de um segmento de linha?

Suponha que eu tenha um segmento de linha indo de (x1, y1) para (x2, y2). Como faço para calcular o vetor normal perpendicular à linha?

Eu posso encontrar muitas coisas sobre como fazer isso para aviões em 3D, mas sem coisas 2D.

Por favor, vá com calma na matemática (links para exemplos trabalhados, diagramas ou algoritmos são bem-vindos), eu sou um programador mais do que sou um matemático;)

se definirmos dx = x2-x1 e dy = y2-y1, então as normais são (-dy, dx) e (dy, -dx).

Note que nenhuma divisão é necessária e, portanto, você não está se arriscando a dividir por zero.

Outra maneira de pensar nisso é calcular o vetor unitário para uma determinada direção e depois aplicar uma rotação de 90 graus no sentido anti-horário para obter o vetor normal.

A representação da matriz da transformação 2D geral se parece com isso:

 x' = x cos(t) - y sin(t) y' = x sin(t) + y cos(t) 

onde (x, y) são os componentes do vetor original e (x ‘, y’) são os componentes transformados.

Se t = 90 graus, então cos (90) = 0 e sin (90) = 1. Substituindo e multiplicando-o, obtemos:

 x' = -y y' = +x 

O mesmo resultado dado anteriormente, mas com um pouco mais de explicação de onde ele vem.

Esta questão foi publicada há muito tempo, mas encontrei uma maneira alternativa de respondê-la. Então eu decidi compartilhar isso aqui.
Em primeiro lugar, é preciso saber que: se dois vetores são perpendiculares, seu produto escalar é igual a zero.
O vetor normal (x',y') é perpendicular à linha que conecta (x1,y1) e (x2,y2) . Esta linha tem direção (x2-x1,y2-y1) ou (dx,dy) .
Assim,

 (x',y').(dx,dy) = 0 x'.dx + y'.dy = 0 

Existem vários pares (x ‘, y’) que satisfazem a equação acima. Mas o melhor par que SEMPRE satisfaz é (dy,-dx) ou (-dy,dx)

 m1 = (y2 - y1) / (x2 - x1) 

se duas linhas perpendiculares:

 m1*m2 = -1 

então

 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 é algo se você quiser passar de um ponto que você definiu