Hallo,
ich wollte eine Methode schreiben, die ein boolean zurückgibt, ob eine Strecke (x1,y1,x2,y2) und ein Polygon sich schneiden.
Wenn die Strecke einen Eckpunkt durchläuft oder auf einer Polygonseite liegt, soll es nicht als schneiden gelten.
Meine Idee war, z.B 1000 Punkte auf der Strecke zu nehmen(durch Einsetzen in Geradengleichung) und mit der Polygon contains Methode zu überprüfen, ob der Punkt im Polygon liegt.
Diese Vorgehensweise funktioniert nur in den wenigsten Fällen, hat wer eine Idee wo der Fehler ist?
Danke im Vorraus.
ich wollte eine Methode schreiben, die ein boolean zurückgibt, ob eine Strecke (x1,y1,x2,y2) und ein Polygon sich schneiden.
Wenn die Strecke einen Eckpunkt durchläuft oder auf einer Polygonseite liegt, soll es nicht als schneiden gelten.
Meine Idee war, z.B 1000 Punkte auf der Strecke zu nehmen(durch Einsetzen in Geradengleichung) und mit der Polygon contains Methode zu überprüfen, ob der Punkt im Polygon liegt.
Java:
public boolean intersectsLine(double x1, double y1, double x2, double y2) {
boolean intersects = false;
if (x2 - x1 == 0) { // unendliche Steigung
return intersects;
}
double m = (y2 - y1) / (x2 - x1); // Steigung
double b = y1 - m * x1;
double l = Math.sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1)); // Läbnge der Strecke
double s = l / 1000.0; // Strecke in 1000 teilstrecken teilen
if( m == 0.0) { // keine Steigung
m = 1;
}
for (double i = x1 + s; i < x2; i += s) { // 1000 Teilpunkte von Strecke testen
double j = m * i + b;
if (polygon.contains(i, j)) { // Test ob Punkt in Polygon
intersects = true;
break; }
}
return intersects;
}
Diese Vorgehensweise funktioniert nur in den wenigsten Fällen, hat wer eine Idee wo der Fehler ist?
Danke im Vorraus.