Frage

Wenn ich eine Polylinie, die eine Straße beschreibt und ich kenne die Straßenbreite in allen Teilen gibt es einen Algorithmus, den ich verwenden kann, um zu bestimmen, ob ein Punkt auf der Straße? Ich bin nicht ganz sicher, wie dies seit der Linie zu tun hat selbst eine Breite von 1 Pixel.

Danke,

Jeff

War es hilfreich?

Lösung

Finden Sie den Mindestabstand des Punktes auf der Linie (es wird ein Vektor senkrecht zur Linie). Tatsächliche Berechnung, wo P0 der erste Punkt des Straßensegmentes ist, v ist der Straßensegmentvektor und w ist der Vektor von P0 zu dem Punkt, in Frage. Sie müssen jede Kante in der Polylinie iterieren. Wenn der Abstand kleiner ist als die Breite des Segments, dann ist es „auf“ der Straße.

d = |v x w| / |v|

Die Ecken könnten schwierig sein, je nachdem, ob man sich als rundliches behandeln (mit konstantem Radius) oder eckig.

Andere Tipps

Vielleicht könnten Sie jedes Liniensegment nehmen, bauen das Rechteck des Liniensegmentes + seine Breite, und die Verwendung Rechteck / Punkt Kollisionsalgorithmen, um zu bestimmen, ob das Rechteck den Punkt enthält. Ein guter Algorithmus entfallen die Breite = 1 Szenario, die einfach versuchen sollte die inverse Funktion des Liniensegments zu bauen und bestimmen, ob y-1 (point.y) ist ein x zwischen line_segment.x1 und line_segment.x2

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top