AGB  ·  Datenschutz  ·  Impressum  







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

Zusammenstoß von Kugeln

Ein Thema von braingrenade · begonnen am 28. Jun 2004 · letzter Beitrag vom 4. Jul 2004
Antwort Antwort
Seite 5 von 7   « Erste     345 67      
xineohp

Registriert seit: 29. Jan 2004
Ort: Heusenstamm
420 Beiträge
 
Delphi 2005 Professional
 
#41

Re: Zusammenstoß von Kugeln

  Alt 30. Jun 2004, 19:56
Zitat von braingrenade:
Delphi-Quellcode:
      vbuf := subvectors(chspr[i].v,chspr[i2].v) ;

       alpha := arccos(dotproduct(chspr[i].v,vbuf)/((magnitude(chspr[i].v)*magnitude(vbuf))));
       lengthv := cos(alpha)*magnitude(chspr[i].v);
       v1 := scalevector(normalize(vbuf),lengthv);

        // ich glaube du musst an dieser Stelle vbuf neu berechnen ... du musst ja meinen VektorA für zwei verschiedene Kugeln berechnen! mit anderen Worten es gibt zwei verschiedene Vektoren A

       alpha := arccos(dotproduct(chspr[i2].v,vbuf)/((magnitude(chspr[i2].v)*magnitude(vbuf))));
       lengthv := cos(alpha)*magnitude(chspr[i2].v);
       v2 := scalevector(normalize(vbuf),lengthv);

       vbuf := addvectors(v1,v2); // vbuf ist am Ende immer (0,0), v1 und v2 sind "Gegenvektoren"

       chspr[i].v := subvectors(chspr[i].v,vbuf);
       chspr[i2].v := addvectors(chspr[i2].v,vbuf);
EDIT: genau das ist der Fehler, du musst bei meinem Kommentar vbuf := -vbuf einsetzen, da das ganze ja für den zweiten Punkt "von der anderen Seite" betrachtet werden muss.

EDIT2: im Übrigen würde ich vbuf umbenennen ... aber das ist wohl eher marginal
Peter Enenkel
blubb
  Mit Zitat antworten Zitat
Benutzerbild von braingrenade
braingrenade

Registriert seit: 30. Okt 2002
Ort: Neufra
274 Beiträge
 
Delphi 6 Personal
 
#42

Re: Zusammenstoß von Kugeln

  Alt 30. Jun 2004, 20:04
hmm.. wenn ich's so mache ist vbuf am ende trotzdem (0,0)
Delphi-Quellcode:
      vbuf := subvectors(chspr[i].v,chspr[i2].v) ;

       alpha := arccos(dotproduct(chspr[i].v,vbuf)/((magnitude(chspr[i].v)*magnitude(vbuf))));
       lengthv := cos(alpha)*magnitude(chspr[i].v);
       v1 := scalevector(normalize(vbuf),lengthv);

       vbuf := subvectors(chspr[i2].v,chspr[i].v) ; // neu
       alpha := arccos(dotproduct(chspr[i2].v,vbuf)/((magnitude(chspr[i2].v)*magnitude(vbuf))));
       lengthv := cos(alpha)*magnitude(chspr[i2].v);
       v2 := scalevector(normalize(vbuf),lengthv);

       vbuf := addvectors(v1,v2);

       chspr[i].v := subvectors(chspr[i].v,vbuf);
       chspr[i2].v := addvectors(chspr[i2].v,vbuf);
Let the sun beat down upon my face
Stars fill my dream
I am a traveller of both time and space
To be where I have been ________________ Such A Surge
  Mit Zitat antworten Zitat
xineohp

Registriert seit: 29. Jan 2004
Ort: Heusenstamm
420 Beiträge
 
Delphi 2005 Professional
 
#43

Re: Zusammenstoß von Kugeln

  Alt 30. Jun 2004, 20:11
hm, welche Geschwindigkeit haben denn die Kugeln und an welcher Stelle befinden sie sich?
Die Berechnung geht von den Kugelmittelpunkten aus ... die dürfen folglich nicht identisch sein, da ja sonst VektorD (= der Abstand) gleich 0 ist, womit die ganze Rechnung zusammenbricht!

EDIT: die Umsetzung meiner Rechnung in Code scheint übrigens zu stimmen. Ich wette du arbeitest bei deiner Kollisionsabfrage nur mit den Kugelmittelpunkten, nicht mit den Radien ... womit der Abstand der Kugelzentren bei einer Kollision immer 0 wäre ...
Peter Enenkel
blubb
  Mit Zitat antworten Zitat
Benutzerbild von braingrenade
braingrenade

Registriert seit: 30. Okt 2002
Ort: Neufra
274 Beiträge
 
Delphi 6 Personal
 
#44

Re: Zusammenstoß von Kugeln

  Alt 30. Jun 2004, 20:18
Es sind halt ziemlich viele Kugeln , aber normalerweise Überschneiden sich die Mittelpunkte nicht.

Ich hab das Programm einfach mal angehängt.

EDIT : das Problem steckt in der Unit chaos.
EDIT2 : Meine Kollision basiert auf Bitmasken.
Angehängte Dateien
Dateityp: zip chaos4.zip (412,1 KB, 21x aufgerufen)
Let the sun beat down upon my face
Stars fill my dream
I am a traveller of both time and space
To be where I have been ________________ Such A Surge
  Mit Zitat antworten Zitat
xineohp

Registriert seit: 29. Jan 2004
Ort: Heusenstamm
420 Beiträge
 
Delphi 2005 Professional
 
#45

Re: Zusammenstoß von Kugeln

  Alt 30. Jun 2004, 20:43
ich hab da so einen Verdacht worans liegt ... siehe Bild.
Ich schätze mal, da war meine Zeichnung einwenig un-eindeutig, sorry.
Miniaturansicht angehängter Grafiken
verdacht.jpg  
Peter Enenkel
blubb
  Mit Zitat antworten Zitat
xineohp

Registriert seit: 29. Jan 2004
Ort: Heusenstamm
420 Beiträge
 
Delphi 2005 Professional
 
#46

Re: Zusammenstoß von Kugeln

  Alt 30. Jun 2004, 20:57
mit folgenden Änderungen funktionierts:

Delphi-Quellcode:
//statt
//vbuf := subvectors(chspr[i].v,chspr[i2].v) ;
vbuf := subvectors( makeVector(chspr[i].x,chspr[i].y), makeVector(chspr[i2].x,chspr[i2].y) ) ;

//und statt
//vbuf := subvectors(chspr[i2].v,chspr[i].v) ;
vbuf := subvectors( makeVector(chspr[i2].x,chspr[i2].y), makeVector(chspr[i].x,chspr[i].y) ) ;
einziges Problem: es wird nur ungefähr jede zehnte Kollision erkannt ...
Peter Enenkel
blubb
  Mit Zitat antworten Zitat
Benutzerbild von braingrenade
braingrenade

Registriert seit: 30. Okt 2002
Ort: Neufra
274 Beiträge
 
Delphi 6 Personal
 
#47

Re: Zusammenstoß von Kugeln

  Alt 30. Jun 2004, 21:16
Ah ja danke !

Das komische daran ist aber das er jede Kollision erkennt, bei machen aber nix passiert
Let the sun beat down upon my face
Stars fill my dream
I am a traveller of both time and space
To be where I have been ________________ Such A Surge
  Mit Zitat antworten Zitat
xineohp

Registriert seit: 29. Jan 2004
Ort: Heusenstamm
420 Beiträge
 
Delphi 2005 Professional
 
#48

Re: Zusammenstoß von Kugeln

  Alt 30. Jun 2004, 21:21
genau ...

kann man die Kugeln irgendwie größer machen?
Peter Enenkel
blubb
  Mit Zitat antworten Zitat
Benutzerbild von braingrenade
braingrenade

Registriert seit: 30. Okt 2002
Ort: Neufra
274 Beiträge
 
Delphi 6 Personal
 
#49

Re: Zusammenstoß von Kugeln

  Alt 30. Jun 2004, 21:24
Du kannst einfach die x.bmp durch ein Bild deiner Whal ersetzen, probier ich gerade , aber ändert sich auch nix. Wenn du ein Größeres Bild nimmst dann setz am besten in Unit1 die Zahl der Objekte kleiner.

Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
xplus := 0;
yplus := 0;
path := extractfilepath(application.exename);
x := Tchaos.create(form1.Handle,path+'x.bmp',10); //hier die zahl der Objekte einstellen in diesem Fall 10
end;
Let the sun beat down upon my face
Stars fill my dream
I am a traveller of both time and space
To be where I have been ________________ Such A Surge
  Mit Zitat antworten Zitat
xineohp

Registriert seit: 29. Jan 2004
Ort: Heusenstamm
420 Beiträge
 
Delphi 2005 Professional
 
#50

Re: Zusammenstoß von Kugeln

  Alt 30. Jun 2004, 21:39
ich glaube irgendwas ist an der Physik falsch ... die Dinger werden ja immer schneller (wenn sie sich dann mal treffen)?! das kann doch eigentlich irgentwie nicht sein, oder?
Peter Enenkel
blubb
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 5 von 7   « Erste     345 67      


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 22:35 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