|
JLI Spieleprogrammierung
|
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
|
Verfasst am: 26.01.2006, 22:40 Titel: Zwei Kugeln Stoßen sich ab |
|
|
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
Bis Denne - Maddin _________________ - - - - - - - - - - - - - - - - - - - -
-> http://www.sea-productions.de
-> http://www.krawall.de
- - - - - - - - - - - - - - - - - - - - |
|
Nach oben |
|
|
Jonathan_Klein Living Legend
Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 27.01.2006, 10:23 Titel: |
|
|
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 |
|
|
Mat Senior JLI'ler
Alter: 36 Anmeldedatum: 17.09.2005 Beiträge: 205 Wohnort: Koblenz Medaillen: Keine
|
Verfasst am: 27.01.2006, 19:34 Titel: |
|
|
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 |
|
|
|
|
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
|