keb2308

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!
Auf Facebook teilen
Auf X (Twitter) teilen
Auf Reddit teilen
Auf Linkedin teilen

Content-ID: 289330

Url: https://administrator.de/forum/fehler-bei-kollisionsabfrage-289330.html

Ausgedruckt am: 26.06.2025 um 08:06 Uhr

keb2308
keb2308 26.11.2015 um 13:46:23 Uhr
Goto Top
Hat sich erledigt, hab den Fehler gefunden.