Perpendiculaire à une ligne à partir d'un point donné
Comment puis-je tracer une perpendiculaire sur un segment de ligne à partir d'un point donné? Mon segment de ligne est définie comme (x1, y1), (x2, y2), Si je dessine une perpendiculaire en un point (x3,y3) et se réunit à la ligne sur point (x4,y4). Je veux trouver cette (x4,y4).
- Voir ici: stackoverflow.com/questions/10301001/...
Vous devez vous connecter pour publier un commentaire.
J'ai résolu les équations pour vous:
Où ^2 signifie au carré
De wiki:
La pente de la ligne, m, par (x1, y1) et (x2, y2) est m = (y1 - y2) /(x1 - x2)
Je suis d'accord avec pierre.murray.la rouille, les vecteurs de rendre la solution plus claire:
Vous trouverez souvent que l'utilisation de vecteurs rend la solution plus claire...
Voici une routine de ma propre bibliothèque:
}
Vous aurez à mettre en œuvre Real2 (un point) et Vector2 et dotProduct (), mais ceci devrait être simple:
Le code ressemble à quelque chose comme:
La bibliothèque (org.xmlcml.euclide) est à:
http://sourceforge.net/projects/cml/
et il y a des tests unitaires qui exercera cette méthode et vous montrer comment l'utiliser.
getUnitVector()
. Aussi mauvais.Vous savez à la fois le point et la pente, donc l'équation de la nouvelle ligne est:
Depuis la ligne perpendiculaire, la pente est négative réciproque. Vous avez maintenant deux équations et peut résoudre pour que leur intersection.
y=mx+b
--m
ici est la pente que vous venez de trouver, b, on peut résoudre à l'aide de p3. Vous avez maintenant tout ce qui est nécessaire pour une ligne.Calculer la pente de la droite joignant les points (x1,y1) et (x2,y2) comme
m=(y2-y1)/(x2-x1)
Équation de la ligne joignant (x1,y1) et (x2,y2) à l'aide de point-pente forme d'équation de droite, serait
y-y2 = m(x-x2)
Pente de la droite joignant (x3,y3) et (x4,y4) serait
-(1/m)
De nouveau, l'équation de la ligne joignant (x3,y3) et (x4,y4) à l'aide de point-pente forme d'équation de droite, serait
y-y3 = -(1/m)(x-x3)
Résoudre ces deux équations, vous résoudre une équation linéaire à deux variables et les valeurs de x et y, vous obtenez serait votre (x4,y4)
J'espère que cette aide.
acclamations
La fonction Matlab code pour le problème suivant
Mathematica introduit la fonction
RegionNearest[]
dans la version 10, 2014. Cette fonction peut être utilisée pour retourner une réponse à cette question:C'est surtout un double de Arnkrishn de réponse. Je voulais juste compléter sa section avec un ensemble complet de Mathematica extrait de code:
C'est un C# de mise en œuvre de la accepté de répondre. Il est également à l'aide d'ArcGis pour revenir MapPoint que c'est ce que nous allons utiliser pour ce projet.
Merci à Ray que cela a fonctionné parfaitement pour moi.
c#arcgis>
C'est un vectorisé la fonction Matlab pour trouver des paires de projections de
m
les points surn
des segments de ligne. Icixp
etyp
sontm by 1
vecteurs holding coordonnées dem
différents points, etx1
,y1
,x2
ety2
sontn by 1
vecteurs de la tenue de coordonnées de points de début et fin den
différents segments de ligne.Il retourne
m by n
matrices,x
ety
, oùx(i, j)
ety(i, j)
sont les coordonnées de la projection dei
-ème point surj
-ème ligne.Le travail est fait dans les premières lignes et le reste de la fonction exécute un auto-test de la démo, juste au cas où elle est appelée sans paramètres. Il est relativement rapide, j'ai réussi à trouver les projections de 2k points sur 2k segments de ligne en moins de 0,05 s.