keb2308
Goto Top

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:
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!

Content-Key: 289330

Url: https://administrator.de/contentid/289330

Printed on: April 24, 2024 at 09:04 o'clock

Member: keb2308
keb2308 Nov 26, 2015 at 12:46:23 (UTC)
Goto Top
Hat sich erledigt, hab den Fehler gefunden.