Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Mi Jul 16, 2025 19:02

Foren-Übersicht » Programmierung » Allgemein
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Kollision von Ovalen
BeitragVerfasst: Do Apr 20, 2006 18:21 
Offline
DGL Member

Registriert: Do Apr 08, 2004 16:55
Beiträge: 516
Ich finde atm meinen Denkfehler nicht bei dem schreiben einer Kollisionserkennung mit 2 Ovalen.

Mein Ansatz war( Vereinfachte Form für Lesbarkeit; Es geht nur um die Mathematik dahinter ):

Code:
  1.  
  2. double RAD = Math.atan2(a.x - b.x, a.y - b.y); // Winkel output zwischen +PI und -PI
  3. int A = Math.sqrt(Math.pow(Math.cos(RAD)*a.x) + Math.pow(Math.sin(RAD)*a.y)); // Hyp. von a
  4. int B = Math.sqrt(Math.pow(Math.cos(RAD)*b.x) + Math.pow(Math.sin(RAD)*b.y)); // Hyp. von b
  5.  
  6. int DisAB = Math.sqrt(Math.pow(a.x - b.x) + Math.pow(a.y - b.y)); // Ges. Hyp.
  7.  
  8. if ( A + B >= DisAB ) return true;
  9. return else;


Falls ihr euch über die etwas sonderbare Schreibweisse wundert...fragt lieber nicht wofür ich das brauche. :?

mfg

Speedmaster

_________________
Shareholder und Leitender Entwickler bei Pipedream-Games.

Zitat: Siehst du diesen Park da unten? Jeden Tag lernen sich darin Menschen kennen und verlassen einander. Und du hast dein ganzes Leben Zeit darin zu gehen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Apr 20, 2006 19:42 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Aug 17, 2005 13:19
Beiträge: 98
Wohnort: Jahnsdorf
Eigentlich musst Du doch nur prüfen, ob

((1/r1 1/r2 1/r3) * (P - (m1 m2 m3)))^2 = 1 (Kugel-gleichung für Ovale angepasst)

beide Ovale eine gemeinsame Punktmenge besitzen.

Diese kannst Du über ein quadratisches Gleichungssystem bestimmen.

Wobei M der Mittelpunkt des Ovals und R die Ausdehnung in die drei Richtungen ist. P steht für alle Punkte auf dem Oval.

Nachteil: Keine Vertrehung\Scheerung zwischen den Ovalen möglich. Dazu müsste man noch einige Dinge ergänzen.

_________________
Administrator of Project Omorphia
Bild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Apr 20, 2006 20:07 
Offline
DGL Member

Registriert: Do Apr 08, 2004 16:55
Beiträge: 516
Deine Idee wird vermutlich funktionieren, allerdings ist das wohl ein bischen viel für ein bischen Ovalenkollision! :wink:

_________________
Shareholder und Leitender Entwickler bei Pipedream-Games.

Zitat: Siehst du diesen Park da unten? Jeden Tag lernen sich darin Menschen kennen und verlassen einander. Und du hast dein ganzes Leben Zeit darin zu gehen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Apr 21, 2006 00:39 
Offline
Forenkatze
Benutzeravatar

Registriert: Mi Okt 22, 2003 18:30
Beiträge: 1945
Wohnort: Närnberch
Programmiersprache: Scala, Java, C*
hehe... Mit Kanonen auf Spatzen zu schießen kommt immer gut ^^ Außer vielleicht für die Performance ;)

_________________
"Für kein Tier wird so viel gearbeitet wie für die Katz'."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Apr 21, 2006 12:26 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Aug 17, 2005 13:19
Beiträge: 98
Wohnort: Jahnsdorf
Man kann in meiner Gleichung 2 Vereinfachungen einbauen:
1. Wenn der Abstand der Mittelpunkte M1 und M2 nach partiellem Abstand größer als die Radien in diese Richtungen ist --> keine Kollision

2. Man brauch nicht die gesamte Punktschaar berechnen, sondern kann die Berechnung auf einen Punkt P der Peripherie konzentrieren, der auf der Strecke zwischen M1 und M2 liegt konzentrieren.

Weiterhin sollte beachtet werden, dass man gegenseitig überprüfen muss, dass M1 außerhalb von M2 und M2 außerhalb von M1 liegt (wenn mindestens eine dieser Bedingungen gebrochen wird, kollidieren die Ovale.

Übrigens: Die Prüfung auf korrektheit der Ungleichung |(P - M)/R| <= 1 ist konstant in O(1)* durchführbar.

Worstcase wäre also die gesamte Überprüfung aller Teilschritte durchzuführen, was etwa 5 solcher Oval-Punkt-Vergleiche und wenige weitere Berechnungen\Vergleiche benötigen würde. Weiterhin komplizierter wird es bei gedrehten Ovalen, wo die größe für den ersten Schritt das Maximum der Radien sein sollteund in jeder der Vergleichsoperationen eine Punktrotation mit reinkommt.



*) 2*Sub, 2*Div, 1*Add, 1 Vgl.

_________________
Administrator of Project Omorphia
Bild


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 
Foren-Übersicht » Programmierung » Allgemein


Wer ist online?

Mitglieder in diesem Forum: Bing [Bot] und 6 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.008s | 15 Queries | GZIP : On ]