AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Kollision

Ein Thema von Mr.M · begonnen am 12. Mai 2004 · letzter Beitrag vom 12. Mai 2004
Antwort Antwort
Mr.M

Registriert seit: 7. Mai 2004
5 Beiträge
 
Delphi 7 Enterprise
 
#1

Kollision

  Alt 12. Mai 2004, 15:36
Hi, ich habe ein kleines Problem mit einem Programm von mir. Das Programm wird auf einer Canvas Fläche ausgeführt und die Kollision zweier Bälle soll nach dem elastischen Stoß geschehen!!! Die Formel für den elastischen Stoß habe ich, aber wenn sich zwei Bälle auf der Canvas Fläche kollidieren, ist der Einfallswinkel nich der Ausfallswinkel, sondern der Ball wird einfach zurück reflecktiert.

Nun habe ich etwas mir mit Schwerpunkten überlegt, aber ich weiß nicht wie ich das in einer Formel von Delphi unterbringen kann! Hat jemand Ahnung von Kollisionen von Objekten im Eindimensionalen? Wenn ja bitte melden!!!
  Mit Zitat antworten Zitat
Alibi

Registriert seit: 15. Aug 2003
Ort: Bispingen
94 Beiträge
 
Delphi 7 Personal
 
#2

Re: Kollision

  Alt 12. Mai 2004, 15:48
Im eindimensionalen Raum können die Bälle ja nur auf einer Linie sich bewegen, also nur reflektiert werdenn (Also die Bewegungsrichtung um 180° ändern).
Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots.
So far, the Universe is winning.
  Mit Zitat antworten Zitat
Mr.M

Registriert seit: 7. Mai 2004
5 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: Kollision

  Alt 12. Mai 2004, 16:01
Ach, ich meinte Zeidimensional, sry.
  Mit Zitat antworten Zitat
Mr.M

Registriert seit: 7. Mai 2004
5 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: Kollision

  Alt 12. Mai 2004, 16:28
Hier ist noch die Prozdeur zur Kollisionserkennung und dem Geschwindigkeitstausch!

Delphi-Quellcode:
procedure TprogMain.BallKollision(i:integer);
var Distanz:double;
var vx1,vy1,vx2,vy2:double;
var m1,m2:double;
var j:integer;
var a:double;
begin
     for j:=i to MaxBaelle-1 do
     begin
          Distanz:=sqrt(sqr(Ball[i].x-Ball[j].x+Ball[i].vx) +sqr(Ball[i].y-Ball[j].y+Ball[i].vy));
               if ((Ball[i].r+Ball[j].r)>Distanz) and (Distanz<>0) then
               begin
// flag:=Snd_async;
                    if checkbox3.Checked=true then sndplaysound('SOUND111.WAV',snd_async);
                    m1:=round(pi*sqr(Ball[i].r));
                    m2:=round(pi*sqr(Ball[j].r));
                    vx1:=Ball[i].vx;
                    vy1:=Ball[i].vy;
                    vx2:=Ball[j].vx;
                    vy2:=Ball[j].vy;
{ ab hier ist das Problem, zwar ist die Formel für den elastischen Stoß richtig, aber etwas fehlt noch, das ich nicht beachtet habe}

                    Ball[i].vx:=((m1-m2)*vx1 + 2*m2*vx2)/(m1+m2);
                    Ball[i].vy:=((m1-m2)*vy1 + 2*m2*vy2)/(m1+m2);
                    Ball[j].vx:=((m2-m1)*vx2 + 2*m1*vx1)/(m1+m2);
                    Ball[j].vy:=((m2-m1)*vy2 + 2*m1*vy1)/(m1+m2);

          Distanz:=sqrt(sqr(Ball[i].x-Ball[j].x)+sqr(Ball[i].y-Ball[j].y));
               if ((Ball[i].r+Ball[j].r)>Distanz) and (Distanz<>0) then Kollisionen:=Kollisionen+1;
                    progmain.Caption:='Ballsimulation (' + floattostr(Kollisionen) + ' Kollisionen)';
               end;
     end;
end;
  Mit Zitat antworten Zitat
XeRo

Registriert seit: 23. Okt 2003
Ort: Warth
461 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: Kollision

  Alt 12. Mai 2004, 18:16
Nur ein tipp: es reicht wenn du einmal var schreibst und zwar vor der ersten variable; die anderen kannst du einfach dranhängen.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:07 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz