![]() |
Re: Zusammenstoß von Kugeln
Zitat:
EDIT2: im Übrigen würde ich vbuf umbenennen ... aber das ist wohl eher marginal :mrgreen: |
Re: Zusammenstoß von Kugeln
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); |
Re: Zusammenstoß von Kugeln
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 ... |
Re: Zusammenstoß von Kugeln
Liste der Anhänge anzeigen (Anzahl: 1)
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. |
Re: Zusammenstoß von Kugeln
Liste der Anhänge anzeigen (Anzahl: 1)
ich hab da so einen Verdacht worans liegt ... siehe Bild.
Ich schätze mal, da war meine Zeichnung einwenig un-eindeutig, sorry. |
Re: Zusammenstoß von Kugeln
mit folgenden Änderungen funktionierts:
Delphi-Quellcode:
einziges Problem: es wird nur ungefähr jede zehnte Kollision erkannt ...
//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) ) ; |
Re: Zusammenstoß von Kugeln
Ah ja danke !
Das komische daran ist aber das er jede Kollision erkennt, bei machen aber nix passiert :shock: |
Re: Zusammenstoß von Kugeln
genau ...
kann man die Kugeln irgendwie größer machen? |
Re: Zusammenstoß von Kugeln
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; |
Re: Zusammenstoß von Kugeln
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?
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:24 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz