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 trucs sur le fait de faire ça pour les avions en 3D, mais pas de trucs 2D.
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;)
Réponses:
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 donc pas de diviser par zéro.
la source
(x', y') = (-y, x)
et(x', y') = (y, -x)
semble avoir raison, mais pourquoi utiliserait-ondx
etdy
ici. De plus, basé sur les pentes,m1 * m2 = -1
pour les droites à angle droit, doncdy' = dx' * (-dx/dy)
etdx' = dy' * (-dy/dx)
, comment se fait-il dans votre équationnormal.x = x' = -dy
?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 antihoraire pour obtenir le vecteur normal.
La représentation matricielle de la transformation 2D générale ressemble à ceci:
où (x, y) sont les composants du vecteur original et (x ', y') sont les composants transformés.
Si t = 90 degrés, alors cos (90) = 0 et sin (90) = 1. Le substituer et le multiplier donne:
Même résultat que celui donné précédemment, mais avec un peu plus d'explications quant à sa provenance.
la source
Cette question a été postée il y a 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 une direction(x2-x1,y2-y1)
, ou(dx,dy)
.Alors,
Il y a beaucoup de paires (x ', y') qui satisfont l'équation ci-dessus. Mais la meilleure paire qui satisfait TOUJOURS est soit
(dy,-dx)
soit(-dy,dx)
la source
si deux lignes perpendiculaires:
puis
b est quelque chose si vous voulez le passer à partir d'un point que vous avez défini
la source