Déterminer si un point est sur une route
-
19-09-2019 - |
Question
Si j'ai un polyligne qui décrit une route et je sais que la largeur de la route à toutes les parties, est-il un algorithme que je peux utiliser pour déterminer si un point est sur la route? Je ne suis pas entièrement sûr de savoir comment faire cela depuis la ligne elle-même a une largeur de 1px.
merci,
Jeff
La solution
Trouver la distance minimale du point à la ligne (ce sera un vecteur perpendiculaire à la ligne). calcul réel où P0 est le premier point du segment de route, v est le vecteur de segment de route et w est le vecteur de P0 au point en question. Vous devrez itérer sur chaque bord de la polyligne. Si la distance est inférieure à la largeur de ce segment, alors il est « sur » la route.
d = |v x w| / |v|
Les coins peuvent être délicat en fonction de si on les traite comme (rayon constant) arrondies ou angulaires.
Autres conseils
Peut-être que vous pourriez prendre chaque segment de ligne, construire le rectangle du segment de ligne + sa largeur, et utiliser des algorithmes de collision rectangle / points pour déterminer si le rectangle contient le point. Un bon algorithme va tenir compte de la largeur = 1 scénario, qui doit simplement tenter de construire la fonction inverse du segment de ligne et de déterminer si y-1 (point.y) est un x compris entre line_segment.x1 et line_segment.x2