Einzelnen Beitrag anzeigen

Cöster

Registriert seit: 6. Jun 2006
589 Beiträge
 
Turbo Delphi für Win32
 
#23

Re: Gasteilchen 3D [Version 1.6!]

  Alt 3. Mär 2007, 13:48
Zitat von mr.winkle:
Warum wird so nicht der komplette Raum ausgefüllt, sondern es bleiben immer Ränder?
Was meinst du mit "Rändern"? Wenn die Anzahl der Teilchen keine Kubikzahl (weiß nicht, ob's das Wort gibt, ich meine Zahlen deren dritte Wurzel eine ganze Zahl ist, z.B. 27), wird das so nicht glatt aufgehen. Auch wenn es eine Kubikzahl ist, müsste man den Code noch etwas ändern:

f:=power(high(T),1/3); Warum nicht Length statt High?

Delphi-Quellcode:
y:=0;
x:=0;
z:=0;
Wenn eine Koordinate 0 ist, liegt das Teilchen ja auf der Oberfläche der Box. Ich würd's also auf d/2 setzen. Dann haben alle außen liegenden Teilchen den gleichen Abstand zur nächst gelegenen Seite der Box (nämlich d/2). Wenn d < Teilchendurchmesser, bedeutet das, dass die Teilchen nicht in die Box passen (zumindest nicht nach diesem Algorithmus)

if x>f*d then begin Aus Optimierungsgründen vll besser direkt auf x>70 prüfen. Kann man aber auch so lassen.

x:=1; Wie kommst du auf 1? Ich würd's wieder auf d/2 setzen (s.o.)

Delphi-Quellcode:
if y>f*d then begin
  y:=1;
  z:=z+d;
end;
Die letzten beiden Punkte gelten auch hier. Außerdem würde ich diese Abfrage in die andere hineinschachteln, da sie ja eigentlich nur aufgerufen werden braucht, wenn y verändert wurde (nach y:=y+d). Falsch wär es zwar nicht es hintereinander zu setzen, kostet aber unnötige Rechenzeit.


Aber wie gesagt, so würde das nur Aufgehen, wenn die Anzahl der Teilchen eine Kubikzahl ist. Denn sonst würdest du ja versuchen, beispielsweise 2,5 Teilchen in eine Reihe zu setzen.
Dafür könntest du aber ja die Anzahl der Teilchen einfach auf die nächsthöhere Kubikzahl erhöhen, dann die Box füllen und anschließend die hinzugefügten Teilchen wieder löschen.

Aber die Idee, es mit der dritten Möhre zu machen, ist gut. Bessere Algorithmen, die die Teilchen ideal gleichmäßig verteilen, auch wenn die Anzahl keine Kubikzahl ist, wären wohl unglaublich kompliziert zu implementieren (vll gibt es so einen Algo bisher sogar gar nicht, genau wie das bisher ungelöste mathematische Rätsel, Punkte gleichmäßig auf einer Kugeloberfläche zu verteiln), erst Recht, wenn die Teilchen unterschiedliche Durchmesser haben.
  Mit Zitat antworten Zitat