Kollisonserkennung

Status
Nicht offen für weitere Antworten.

Campino

Top Contributor
hi,
ich arbeite derzeit mit JOGL an 3D-Grafik. Ich würde gerne wissen, ob meine Objekte, Quader, von denen ich die Koordinate einer Ecke sowie Länge, Breite und Höhe hab, sich überschneiden (also ineinander stecken). Wie geht dass?

Ich hab selbst schon ein wenig experimentiert, bin aber zu keinem (brauchbaren) Ergebnis gekommen. falls jemand grade nicht weiß wie das bei Quadern geht, aber dafür weiß, wie dass bei Polygonobjekten läuft, nehm ich dass auch... :wink:

[edit]
hier ein Versuch nach EagleEyes Tipp:
Das ganze ist im Quader-Objekt und Vertex ist ein Punkt im 3D-Raum, d.h.ein Eckpunkt des anderen Quaders. so geht dass nicht:
Code:
public boolean contains(Vertex v){
		//X-Achse:
		boolean x1=this.x<v.getX();
		boolean x2=this.x+this.getWidth()>v.getX();
		//Y-Achse
		boolean y1=this.getY()<v.getY();
		boolean y2=this.getY()+this.getHeight()>v.getY();
		
//		Z-Achse
		boolean z1=this.getZ()<v.getZ();
		boolean z2=this.getZ()+this.getDepth()>v.getZ();
		
		return x1&&x2&&y1&&y2&&z1&&z2;
	}
Wo ist der Fehler?
 

EgonOlsen

Bekanntes Mitglied
Wenn du was universelles haben willst, empfehle ich einen Ellipsoid-Polygon-Ansatz, d.h. das sich bewegende Objekt wird durch ein Ellipsoid angenährt und dieser wird gegen die Polygone anderer Objekte/der Welt geprüft. Ist allerdings kein besonders leichter Stoff...hier ist aber ein gutes Tutorial: www.peroxide.dk/papers/collision/collision.pdf
 
B

Beni

Gast
Also wenn ein Quader einen anderen schneidet, muss wenigstens irgendeine Kante eine Fläche des anderen Quaders durchstossen.

Wenn diese Kante z.B. parallel zur x-Achse ist, und die Fläche des anderen parallel zur yz-Ebene, dann ist doch:
Code:
x1Gerade <= xEbene <= x2Gerade
y1Ebene <= yGerade <= y2Ebene
z1Ebene <= zGerade <= z2Ebene
? Dann könntest du das für alle Kanten machen... Ich weiss, nicht gerade die Hammer-Lösung, aber ein Anfang...

(z1, z2 und andere: jeweils das eine und das andere Ende der Ebene oder der Geraden).
 

Campino

Top Contributor
also:
Code:
public boolean contains(Vertex v){
	      //X-Achse:
		double xb=v.getX();
	      boolean x1=xb>=this.x;
	      boolean x2=xb<=this.x+this.getWidth();
	      boolean bx=x1&&x2;
	      //Y-Achse
	      double yb=v.getY();
	      boolean y1=yb>=this.y;
	      boolean y2=yb<=this.y+this.width;
	      boolean by=y1&&y2;
	      
	      return bx&&amp;
}
so geht's erstmal, allerdings nur zweidimensional, für mein derzeitiges Projekt reicht dass, später erweiter ich dass dann um die dritte Dimension...
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen

Ähnliche Java Themen

Neue Themen


Oben