211 votes

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 à faire pour les avions en 3D, mais pas de trucs en 2D.

S'il vous plaît, allez-y doucement sur les maths (les liens vers des exemples travaillés, des diagrammes ou des algorithmes sont les bienvenus), je suis plus programmeur que mathématicien;)

297voto

Oren Trutner Points 12125

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.

111voto

duffymo Points 188155

Une autre façon de penser, il est de calculer le vecteur unitaire pour une direction donnée, puis d'appliquer un angle de 90 ° rotation dans le sens antihoraire pour obtenir le vecteur normal.

La représentation matricielle de la 2D général de transformation 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 transformées de composants.

Si t = 90 degrés, alors cos(90) = 0 et sin(90) = 1. La substitution et en multipliant ce résultat donne:

x' = -y
y' = +x

Même résultat que le précédent, mais avec un peu plus d'explications quant à l'endroit où il vient.

17voto

Tu Bui Points 180

Cette question a été posté il ya longtemps, mais j'ai trouvé une autre façon d'y répondre. J'ai donc décidé de le partager ici.
Tout d'abord, 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 direction (x2-x1,y2-y1)ou (dx,dy).
Donc,

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

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

10voto

ufukgun Points 2426
 m1 = (y2 - y1) / (x2 - x1)
 

si perpendiculaire deux lignes:

 m1*m2 = -1
 

puis

 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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X