web-dev-qa-db-fra.com

Comment calculer le vecteur normal d'un segment de ligne?

Supposons que j'ai un segment de ligne allant de (x1, y1) à (x2, y2). Comment calculer le vecteur normal perpendiculaire à la ligne?

Je peux trouver beaucoup de choses sur le faire pour les avions en 3D, mais pas de 2D.

Allez-y doucement sur les maths (les liens vers des exemples travaillés, des diagrammes ou des algorithmes sont les bienvenus), je suis un programmeur plus qu'un mathématicien;)

165
Piku

si nous définissons dx = x2-x1 et dy = y2-y1, alors les normales sont (-dy, dx) et (dy, -dx).

Notez qu'aucune division n'est requise et que vous ne risquez pas de diviser par zéro.

219
Oren Trutner

Une autre façon de penser est de calculer le vecteur unitaire pour une direction donnée, puis d'appliquer une rotation de 90 degrés dans le sens anti-horaire pour obtenir le vecteur normal.

La représentation matricielle de la transformation 2D générale ressemble à ceci:

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

où (x, y) sont les composantes du vecteur d'origine et (x ', y') sont les composantes transformées.

Si t = 90 degrés, alors cos (90) = 0 et sin (90) = 1. Le remplacer et le multiplier donne:

x' = -y
y' = +x

Même résultat que précédemment, mais avec un peu plus d'explications sur son origine.

87
duffymo

Cette question a été postée il y a longtemps, mais j'ai trouvé un moyen alternatif d'y répondre. J'ai donc décidé de le partager ici.
Premièrement, il faut savoir que: si deux vecteurs sont perpendiculaires, leur produit scalaire est égal à zéro.
Le vecteur normal (x',y') est perpendiculaire à la ligne reliant (x1,y1) et (x2,y2). Cette ligne a la direction (x2-x1,y2-y1) ou (dx,dy).
Alors,

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

Il y a beaucoup de paires (x ', y') qui satisfont à l'équation ci-dessus. Mais la meilleure paire que TOUJOURS satisfasse est soit (dy,-dx) ou (-dy,dx)

11
Tu Bui
m1 = (y2 - y1) / (x2 - x1)

si perpendiculaire deux lignes:

m1*m2 = -1

ensuite

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 est quelque chose si vous voulez le passer d'un point que vous avez défini

7
ufukgun