![]() |
---|
Hallo erstmal,
ich habe ein kleines Mathe-Problem und bin dabei auf diese Seite gestoßen :-) Ich Programmiere ein Spiel in OpenGL und hänge gerade an der Kollisionsberechnung, bzw mir will kein möglichst einfacher bzw effizienter Weg einfallen um dieses Problem zu lösen: (Seihe anschauliche Skizzze) Im Spiel fährt man ein Auto (Rechteck) und sammelt Münzen ein, das Problem ist jetzt zu berechnen wann ich diese Münzen/Punkte berühre bzw die Punkte innerhalb des Rechtecks liegen und wann nicht. Das Auto/rechteck (siehe Skizze) ist 2 Einheiten lang und 1 EInheit breit. Ich kenne jederzeit den Mittelpunkt des Autos, es befindet sich jetzt gerade wie in der Skizze auf dem Punkt . Beim lenken rotiert das Auto um die Z-Achse, im Moment ist es gerade um 15° gedreht. Zu berechnen ist nun liegt ein beliebige Punkte im beispiel nun innerhalb des Rechtecks oder nicht. Meine erste Idee war jetzt die 4 Eckpunkte über den Winkel mit trigonometrischen Funktionen auszurechnen, aus den Eckpunkten dann die 4 Geraden aufstellen. Somit könnte ich dann berechnen ob eine gerade den Punkt berührt. Falls nicht müsste ich dann aber immernoch irgendwie testen ob der Punkt innerhalb des Rechtecks liegt. Bin ich damit auf dem Richtigen weg, oder gehts irgendwie einfacher und ich habe nur ein Brett vorm Kopf. Wie gesagt der Weg sollte möglichst simpel sein, da diese Berechnung mit mehreren Punkten mal pro Sekunde (Spiel läuft mit frames pro Sekunde) abläuft. Vielen Dank schonmal für eure Hilfe! Für alle, die mir helfen möchten (automatisch von OnlineMathe generiert): "Ich möchte die Lösung in Zusammenarbeit mit anderen erstellen." |
![]() |
![]() |
Ich hab auch schon mal sowas ähnliches versucht zu Programmieren, und dabei hat mir http//wiki.delphigl.com/index.php/Tutorial_Separating_Axis_Theorem richtig geholfen. (zumindest im 2D bereich ab 3D war mein Matheverständnis noch nicht gereift genug dafür. |
![]() |
Hallo, in dem Link von Dornathal wird schon kurz angedeutet, wie man das macht (Kollision eines Polygons mit einem Punkt: Projektion auf die Achsen). Das läuft dann auf eine Verschiebung und eine Drehung des Koordinatensystems hinaus (siehe beigefügtes Bild). Zuerst verschiebt man das Koordinatensystem in den Mittelpunkt des Autos A und erhält dann für die Koordinaten (x,y) des Punktes P die neuen Koordinaten (x',y'): Dabei sind die Koordinaten des Automittelpunktes. Im 2. Schritt dreht man dann das Koordinatensystem um einen Winkel (in der Mathematik wird ja von der x-Achse aus im Gegenuhrzeigersinn gerechnet). Die Koordinaten (x'',y'') des Punktes P im gedrehten Koordinatensystem erhält man dann mit: Jetzt muß man nur noch prüfen, ob und . Viele Grüße Yokozuna
|
![]() |
Cool Danke! Eigentlich gar nicht kompliziert :-) Werde es heute abend oder morgen programmieren. Mal sehen ob es klappt. Vielen Dank auch für den obigen Link. |