JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=5054c7391aae49445440b80377fa7c35Medaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Zwei Kugeln Stoßen sich ab

 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Fragen, Antworten und Kritik
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Mat
Senior JLI'ler


Alter: 36
Anmeldedatum: 17.09.2005
Beiträge: 205
Wohnort: Koblenz
Medaillen: Keine

BeitragVerfasst am: 26.01.2006, 22:40    Titel: Zwei Kugeln Stoßen sich ab Antworten mit Zitat

Hey,

ich habe ein Problem. Wie der Name schon sagt, habe ich ein Programm vorliegen, indem sich zwei Kugeln (nach Aufeinanderprallen) physikalisch korrekt von einander abstoßen.

Der Code für die Kollisionserkennung etc. steht komplett,
jedoch habe ich ein starkes Problem beim Berechnen der Ausfallswinkel, und der Geschwindigkeit.

Als Ansatz hatte ich mir den Impulserhaltungssatz und Energieerhaltungssatz vorgenommen, komme aber wegen der Richtungen nicht so ganz klar damit.
(Habe in C++ bisher nur sehr wenig mit Vektoren gerechnet).


Falls einer zu diesem Thema eine gute Website kennt, oder eine Lösung parat hat wäre ich sehr froh Wink

Bis Denne - Maddin
_________________
- - - - - - - - - - - - - - - - - - - -
-> http://www.sea-productions.de
-> http://www.krawall.de
- - - - - - - - - - - - - - - - - - - -
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Jonathan_Klein
Living Legend


Alter: 37
Anmeldedatum: 17.02.2003
Beiträge: 3433
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 27.01.2006, 10:23    Titel: Antworten mit Zitat

vollkommen elastischer Stoß zweier Kugeln mit der selben Masse (zum Beispiel für Billiard):

Du musst eine Gerade zwischen den Mittelpunkten der Kugel machen (wärend der Kollision) und dann den Geschwindigkeitsvektor der beiden Kugel in 2 Vektren zerlegen, einer muss dabei auf der Verbindungslinie liegen und der andere senkrecht dazu sein. Dann musst du die beiden auf der Verbingdungslinie liegenden Vectoren der Kugeln vertauschen und dann wieder zusammenrechnen.
_________________
https://jonathank.de/games/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Mat
Senior JLI'ler


Alter: 36
Anmeldedatum: 17.09.2005
Beiträge: 205
Wohnort: Koblenz
Medaillen: Keine

BeitragVerfasst am: 27.01.2006, 19:34    Titel: Antworten mit Zitat

Ich habe es mal so probiert, scheint aber einen Fehler zu haben :/
- - (Wenn ich dich richtig verstanden habe, dann hast du es so gemeint, klingt für mich auch logisch, kommt aber irgendwie kein passables Ergebnis raus)
CPP:
if(KugelA.CheckCollision(&KugelB) && !m_CollisionEffect)
      {
         m_CollisionEffect = true;

         float ASpeedX = KugelA.GetFrontalMoveSpeedX();
         float ASpeedY = KugelA.GetFrontalMoveSpeedY();

         float BSpeedX = KugelB.GetFrontalMoveSpeedX();
         float BSpeedY = KugelB.GetFrontalMoveSpeedY();

         float DirAtoBX = KugelA.GetPositionX()-KugelB.GetPositionX();
         float DirAtoBY = KugelA.GetPositionY()-KugelB.GetPositionY();

            float CosWinkelA = ((ASpeedX*DirAtoBX)+(ASpeedY*DirAtoBY))/(sqrt((ASpeedX*DirAtoBX)*(ASpeedX*DirAtoBX))+sqrt((ASpeedY*DirAtoBY)*(ASpeedY*DirAtoBY)));
         float AXVectorX = CosWinkelA*ASpeedX;
         float AXVectorY = CosWinkelA*ASpeedY;

         float WinkelB = acos(((BSpeedX*DirAtoBX)+(BSpeedY*DirAtoBY))/(sqrt((BSpeedX*DirAtoBX)*(BSpeedX*DirAtoBX))+sqrt((BSpeedY*DirAtoBY)*(BSpeedY*DirAtoBY))));
         float BXVectorX = sin(WinkelB)*BSpeedX;
         float BXVectorY = sin(WinkelB)*BSpeedY;

         float ResultVecX = BXVectorX-AXVectorX;
         float ResultVecY = BXVectorY-AXVectorY;

         float ANewSpeedX = ResultVecX+ASpeedX;
         float ANewSpeedY = ResultVecY+ASpeedY;

         float BNewSpeedX = ResultVecX+BSpeedX;
         float BNewSpeedY = ResultVecY+BSpeedY;

         KugelA.SetFrontalMoveSpeed(ANewSpeedX/100, ANewSpeedY);
         KugelB.SetFrontalMoveSpeed(BNewSpeedX/100, BNewSpeedY);

         
         
         
         


   
         
         
         sprintf(HUHU, "%4.4f/%4.4f", KugelA.GetFrontalMoveSpeedX(),KugelA.GetFrontalMoveSpeedY());
         Buffer = HUHU;

         m_pTextManagement->SetInputValue("Speed1", Buffer);



      

      }

_________________
- - - - - - - - - - - - - - - - - - - -
-> http://www.sea-productions.de
-> http://www.krawall.de
- - - - - - - - - - - - - - - - - - - -
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Fragen, Antworten und Kritik Alle Zeiten sind GMT
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de

Impressum