Fehler bei Kollisionsabfrage
hi,
normalerweise frage ich sowas ungern, aber ich komm einfach nicht auf die Lösung. Ich hab eine einfache Funktion zur Kollisionserkennung programmiert, sie liefert mir aber nicht das richtige Ergebnis.
Hier ist die Funktion:
Das Obstacle besteht aus 2 oder mehreren Punkten (x,y) zwischen denen Vektoren gezogen werden. Dann werden noch 2 Punkte übergeben, kreuzt das Obstacle die Linie zwischen den zwei Punkten findet eine Kollision statt. Bei einer Kollision sollte true geliefert werden, ansonsten false.
Mein Obstacle besteht aus dem Punkt (18, 22) und (22, 22), die zwei Punkte aus (20,20) und (21,28). Trotzdem liefert die Funktion false. Ich komm nicht drauf wieso.
Danke!
normalerweise frage ich sowas ungern, aber ich komm einfach nicht auf die Lösung. Ich hab eine einfache Funktion zur Kollisionserkennung programmiert, sie liefert mir aber nicht das richtige Ergebnis.
Hier ist die Funktion:
public static boolean collision(final Point point1, final Point point2, Obstacle obstacle) {
final double EPSILON = 0.000001;
final double p1x = point1.getX();
final double p1y = point1.getY();
final double p2x = point2.getX();
final double p2y = point2.getY();
double b1x, b1y, b2x, b2y;
ArrayList<Point> punkte = new ArrayList<Point>();
for (Point p : obstacle.getAnchors()) {
punkte.add(p);
}
for (int i = 0; i + 1 < punkte.size(); i++) {
b1x = punkte.get(i).getX();
b1y = punkte.get(i).getY();
b2x = punkte.get(i + 1).getX();
b2y = punkte.get(i + 1).getY();
System.out.println(point1+", "+point2); //Konsolenausgabe: (20 / 20), (21 / 28)
System.out.println(b1x+","+b1y+"|"+b2x+","+b2y); //Konsolenausgabe: 18.0,22.0|22.0,22.0
System.out.println("---------------------------------");
double denom = (b2y - b1y) * (p2x - p1x) - (b2x - b1x) * (p2x - p1y);
if (Math.abs(denom) < EPSILON){
System.out.println("false - eps");
return false;
}
double ua = ((b2x - b1x) * (p1y - b1y) - (b2y - b1y) * (p1x - b1x)) / denom;
double ub = ((p2x - p1x) * (p1y - b1y) - (p2y - p1y) * (p1x - b1x)) / denom;
if (ua >= 0 && ua <= 1 && ub >= 0 && ub <= 1) {
System.out.println("true");
return true;
}
else
System.out.println("false-p");
}
System.out.println("falseend");
return false;
}
Das Obstacle besteht aus 2 oder mehreren Punkten (x,y) zwischen denen Vektoren gezogen werden. Dann werden noch 2 Punkte übergeben, kreuzt das Obstacle die Linie zwischen den zwei Punkten findet eine Kollision statt. Bei einer Kollision sollte true geliefert werden, ansonsten false.
Mein Obstacle besteht aus dem Punkt (18, 22) und (22, 22), die zwei Punkte aus (20,20) und (21,28). Trotzdem liefert die Funktion false. Ich komm nicht drauf wieso.
Danke!
Please also mark the comments that contributed to the solution of the article
Content-Key: 289330
Url: https://administrator.de/contentid/289330
Printed on: April 24, 2024 at 09:04 o'clock
1 Comment