Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Software-Projekte der Mitglieder (https://www.delphipraxis.net/26-software-projekte-der-mitglieder/)
-   -   Gravitationssimulator (https://www.delphipraxis.net/25876-gravitationssimulator.html)

dizzy 14. Jul 2004 02:36


Gravitationssimulator
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ein Zitat aus diesem Thread:
Zitat:

Zitat von gmarts
[...] Lad dir mal TVGenial runter und klicke dann mit der rechten Maustaste auf das Logo(links oben) ...dabei Shift+Alt gedrückt halten. Dann öffnet sich ein Gravitationssimulator. ..Tolle Sache um mit dem Chaos zu spielen.


Hatte mir das Dingen mal runtergeladen und es hat richtig Spaß gemacht damit rumzufummeln :).
Noch mehr Spaß hat es gemacht, als ich meinen Klon davon funktionstüchtig hatte :mrgreen:.

Und hier ist er! Erstmal ohne Soßen, da die im Moment echt nicht ansehnlich sind. Absolut quick'n'dirty mit massig globalen Variablen und reichlich "OneChar"-Bezeichnern *schäm*.
Falls aber Intersse daran besteht, mach ich den QT mal etwas lesbarer.

Viel Spaß damit!

supermuckl 14. Jul 2004 03:18

Re: Gravitationssimulator
 
endgeil !!!!

ich will auf jeden fall den source

Rackergen2 14. Jul 2004 03:21

Re: Gravitationssimulator
 
Sehr schick... gefällt mir... Muss aber wahninnig kompliziert sein... respect!

ibp 14. Jul 2004 09:07

Re: Gravitationssimulator
 
cool, gut auch die farbänderung, interresant wäre auch abschalten von randreflexion und vereinigung von mausmasse mit der übrigen...

Florian H 14. Jul 2004 10:41

Re: Gravitationssimulator
 
wenn ich z.B. 100 Partikel erstelle und das ganz nah am rand, kleben die da oben fest.
sonst endgeil

Ultimator 14. Jul 2004 12:15

Re: Gravitationssimulator
 
:shock: Cool :!:
Saubere Arbeit, muss ich sagen :thuimb:
Kannst ja mal den Source posten ;-)

maximov 14. Jul 2004 14:04

Re: Gravitationssimulator
 
:-D Sehr schön! Vor allem dass die masse pennt :mrgreen:

Ich nehme mal an dass du die berechnung iterativ machst...geht ja auch vermutlich nicht anders. Was ähnliches wollte ich auch mal machen, nur sollte es ein stabiles planeten system werden. Aber durch die iteration haben sich die ungenauigkeiten auf addiert und der mond fiel immer auf die erde :(

Auf jedenfall daumen hoch :thuimb: und den code würd ich auch mal gerne sehen. Vielleicht kann man ja mal ne directX version draus machen oder 'n kleines Asteroids spiel :wink:


// PS: appropos Asteroids was hälst du von einer checkBox, die die teile unendlich durch-cyceln lässt?

Steve90211 14. Jul 2004 14:34

Re: Gravitationssimulator
 
Coole Sache das :thuimb: :mrgreen:
Wie währe es denn mit einer positionierbaren Masse??

ibp 14. Jul 2004 14:37

Re: Gravitationssimulator
 
Zitat:

Zitat von maximov
Ich nehme mal an dass du die berechnung iterativ machst...geht ja auch vermutlich nicht anders. Was ähnliches wollte ich auch mal machen, nur sollte es ein stabiles planeten system werden. Aber durch die iteration haben sich die ungenauigkeiten auf addiert und der mond fiel immer auf die erde :(

.. ist doch richtig, die masse von planeten erhöht sich doch ständig, damit kann das ganze system nicht stabil bleiben, da ja die zentrifugalkraft gleich bleibt, also erhöht sich somit auch die anziehungskraft der körper, folge ...

Rackergen2 14. Jul 2004 14:56

Re: Gravitationssimulator
 
Zitat:

Zitat von ibp
Zitat:

Zitat von maximov
Ich nehme mal an dass du die berechnung iterativ machst...geht ja auch vermutlich nicht anders. Was ähnliches wollte ich auch mal machen, nur sollte es ein stabiles planeten system werden. Aber durch die iteration haben sich die ungenauigkeiten auf addiert und der mond fiel immer auf die erde :(

.. ist doch richtig, die masse von planeten erhöht sich doch ständig, damit kann das ganze system nicht stabil bleiben, da ja die zentrifugalkraft gleich bleibt, also erhöht sich somit auch die anziehungskraft der körper, folge ...

Und warum wandert der Mond dann von uns weg?

ibp 14. Jul 2004 14:59

Re: Gravitationssimulator
 
... kannst du dir ja selber erklären aus masse und zentrifugalkraft

maximov 14. Jul 2004 15:55

Re: Gravitationssimulator
 
Zitat:

Zitat von ibp
Zitat:

Zitat von maximov
Ich nehme mal an dass du die berechnung iterativ machst...geht ja auch vermutlich nicht anders. Was ähnliches wollte ich auch mal machen, nur sollte es ein stabiles planeten system werden. Aber durch die iteration haben sich die ungenauigkeiten auf addiert und der mond fiel immer auf die erde :(

.. ist doch richtig, die masse von planeten erhöht sich doch ständig, damit kann das ganze system nicht stabil bleiben, da ja die zentrifugalkraft gleich bleibt, also erhöht sich somit auch die anziehungskraft der körper, folge ...

In meinem programm hatte ich aber konstante massen, die genau auf erde und mond eingestellt waren...aber das is ein anderes thema :stupid:

[OnTopic]
Irgendwie hat das prog probleme mit dem start und abbrechen buttons bzw. beenden!

dizzy 14. Jul 2004 18:13

Re: Gravitationssimulator
 
Huch! Danke für die vielen Kommentare! Werde den Source dann mal a) noch optimieren (ja da ist noch einiges Potential ;)) und b) Ordentlich schreiben... Aber nicht vor Freitag/Samstag, da ich erst Fr. irgendwann wieder nach Hause komme wo ich Delphi hab :? *entzuuuug*.


Ja, das Teil arbeitet rein Iterativ und ist quasi rundenbasiert. Es gibt ein Objekt GravEngine das ein Array von Partikelobjekten hält. Die Methode GravEngine.NextStep führt auf "einen Schlag" die Bewegung aller Partikel aus, nachdem vorher die Kollisionen bereinigt wurden. Auch die Richtung und Geschwindigkeit werden als Quatum behandelt, d.h. zu einem Zeitpunkt werden sämtliche Änderungen errechnet und dann in einem Rutsch ausgeführt. Dadurch wird das einigermaßen Stabil. Ich habs auch schon geschafft, dass das eine oder andere Partikelchen eine (scheinbar) stabile Ellipsenbahn um eine große Masse einnimmt! Ist aber nicht zu häufig, da die Ränder ja als Banden fungieren. Hier wird's dann die Option geben, dass die enfliehenden Partikel verschwinden - gute Idee!

Eine feste stationäre Masse wäre auch eine feine Sache! Wird gemacht :)

@maximov: Die Masse "pennt" :?: :gruebel:
Und was meinst du mit "durchcyceln" ?

@FlorianH: Jupp, hab ich leider zu spät gesehen. -> ToDo

@Rackergen2: Nö ;). Ist halt etwas Vektorrechnung gepaart mit 1/r² :lol:

@maximov(2): Die Sache mit den Buttons ist die: [Start] startet eine Schleife mit einem Application.ProcessMessages. Pause beendet diese Schleife nicht, sondern nimmt nur den Berechnungsblock raus, so dass nurnoch das ProcesssMessages geloopt wird. Erst der Stop-Button beendet die äusserste Schleife, und erst jetzt lässt sich das Programm schließen bzw. tut es das wenn vorher irgendwann das X gedrückt wurde. Diese etwas wenig elegante Methode habe ich gewählt, da ich irgendwie keine Lust auf Threads hatte :)
So in etwa ists:
Delphi-Quellcode:
procedure onBtnStartClick(Sender: TObject);
begin
  aborted := false;
  paused := false;

  while not aborted do
  begin
    if not paused then
    begin
      MacheRechnungUndZeichne;
    end;
    Application.Processmessages;
  end;
end;
und die Buttons schalten jeweils nur die Flags.

\\edit: Ach ja! Ne DirectX-Version gibt es quasi schon. Halt an Stelle von Graphics32 nen DirectDraw-Image... Aber der Vorteil ist absolut minimal, da G32 schon sehr fix ist, und die reine Darstellung Kleinkram ist. Zumal DirectDraw nativ kein Zeichnen von antialiasten Linien (Richtungsvektoren) mitbringt, und es wird noch die Option "Motionblur" geben - nur wie in nem anderen Thread bereits geschrieben kann DD selbst DAS nicht von Hause aus. Dafür muss man auf Direct3D zurückgreifen, und das ist mir für so einen kleinen Effekt zu heftig.


Schicken Gruß,
bis die Tage,
dizzy

maximov 15. Jul 2004 09:13

Re: Gravitationssimulator
 
Zitat:

Zitat von dizzy
@maximov: Die Masse "pennt" :?: :gruebel:
Und was meinst du mit "durchcyceln" ?

Du kennst doch das spiel 'Asteroids' (das mit den felsbrocken im welt raum, die man zerschiessen kann)? Wenn ein fels oben verschwindet, dann kommt er von unter wieder rein. Das könnte lustige effekte geben. Geil wär auch, wenn man auf grosse massen schiessen könnte und diese dann zerfallen.

Zitat:

@maximov(2): Die Sache mit den Buttons ist die: [Start] startet eine Schleife mit einem Application.ProcessMessages. Pause beendet diese Schleife nicht, sondern nimmt nur den Berechnungsblock raus, so dass nurnoch das ProcesssMessages geloopt wird. Erst der Stop-Button beendet die äusserste Schleife, und erst jetzt lässt sich das Programm schließen bzw. tut es das wenn vorher irgendwann das X gedrückt wurde. Diese etwas wenig elegante Methode habe ich gewählt, da ich irgendwie keine Lust auf Threads hatte :)
Threads würd ich auf nicht machen, da hast du nur sychronisations-kosten. Aber du kannst ganz leicht das application.OnIdle event nutzen:

Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
...
  Application.OnActivate := AppActivate;
  Application.OnDeactivate := AppDeactivate;
end;

procedure TForm1.GameFrame(Sender: TObject; var Done: Boolean);
begin
  MacheRechnungUndZeichne;
  Done := false;
end;

procedure TForm1.AppActivate(Sender: TObject);
begin
    application.OnIdle := GameFrame;                                
end;


procedure TForm1.AppDeactivate(Sender: TObject);
begin
  application.OnIdle := nil;
end;
Und wenn du zu anderen apps wechselst, dann wird der game loop ausser kraft gesetz.

Zitat:

\\edit: Ach ja! Ne DirectX-Version gibt es quasi schon. Halt an Stelle von Graphics32 nen DirectDraw-Image... Aber der Vorteil ist absolut minimal, da G32 schon sehr fix ist, und die reine Darstellung Kleinkram ist. Zumal DirectDraw nativ kein Zeichnen von antialiasten Linien (Richtungsvektoren) mitbringt, und es wird noch die Option "Motionblur" geben - nur wie in nem anderen Thread bereits geschrieben kann DD selbst DAS nicht von Hause aus. Dafür muss man auf Direct3D zurückgreifen, und das ist mir für so einen kleinen Effekt zu heftig.
Nicht wenn man 'ne fertige render engine hat :wink: ...leider hab ich momentan dafür keine zeit. Aber is so ja auch geil :-D

dizzy 15. Jul 2004 11:06

Re: Gravitationssimulator
 
OnIdle nutzen so wie du schreibst klingt mal nach einer richtig guten Idee :thuimb:, so werd ich's umfrickeln! Cool!
Und das Cyclen ist mir getz auch klar. Klingt auch fein, da muss dan mal ne Auswahlkiste rein mit allem möglich was man mit sonnem Partikel machen kann wenns abhaut :)


Bis die Tage,
dizzy

dizzy 19. Jul 2004 01:51

Re: Gravitationssimulator
 
Liste der Anhänge anzeigen (Anzahl: 1)
Jetzt endlich bin ich so weit. Hier der ganze Quatsch - mit Soße :)

Mit eine Klitzekleinigkeit bin ich noch etwas unzufrieden, nämlich der Anzeige der Raumverzerrung insbesondere bei großen Massen. Da kommt es leider noch etwas zu "Raumfaltung" die nicht sein dürfte. Aber es sieht trotzdem ganz nett aus, und mir sind die Ideen ausgegangen wie man das ändern könnte. Nun wurscht, dast Ding ist ganz schick geworden (es sind zur oberen Version ein paar Features dazugekommen).
Sicherlich könnte man an der einen oder anderen Stelle performanter Proggen, aber mir reicht's so wie es ist ;)


Nochmals viel Spaß damit!
gruss,
dizzy

\\Nachtrag: Um den Source zu kompilieren braucht ihr die Graphics32 Library. Wie es mit Delphi < 7 aussieht weiss ich net.

\\edit: UPDATE! Die Version von gestern Nacht hat noch ein Feature, nämlich ein Speicherleck beim Beenden. -> fixed
Die Berechnung der Partikel benötigt jetzt nicht mehr unnötigerweise (n^2 - n) Rechenschritte, sondern nur noch (n^2 + n)/2 (Dreieickszahlen). Durch Luckies Nachfragen ists mir erst aufgefallen...

Luckie 19. Jul 2004 03:08

Re: Gravitationssimulator
 
Delphi-Quellcode:
function VectorLength(v: TVector): double;
asm
  fld v.x;
  fmul v.x;
  fld v.y;
  fmul v.y;
  faddp;
  fsqrt;
  fstp result;
// In Delphi-Language:
//  result := sqrt(sqr(v[0])+sqr(v[1]));
end;
Optimiert hier der Delphi Compiler so schlecht? :gruebel:

Nachtrag: Bei sehr vielen Partikeln leidet die Performance doch recht stark. :roll:

dizzy 19. Jul 2004 03:54

Re: Gravitationssimulator
 
Zitat:

Zitat von Luckie
Optimiert hier der Delphi Compiler so schlecht? :gruebel:

Nuja, rein subjektiv war der asm-Code merklich schneller. Also hab ich ihn gelassen (war eigentlich nur testweise) :).
\\edit: Da fällt mir auf: Der Delphi-Code ist sogar mitlerweile falsch :oops:. TVector war mal ein Array. Mittlerweile ists ein record mit TVector.x und TVector.y *hüstel*.

Zitat:

Zitat von Luckie
Nachtrag: Bei sehr vielen Partikeln leidet die Performance doch recht stark. :roll:

Das ist ja gerade das Problem einer solchen Simulation. Jeder Partikel wirkt auf jeden anderen, und umgekehrt. Es muss also wirklich jeder Partikel durchlaufen werden, und gegen jeden weiteren verrechnet.
Es sind immer (n^2 - n) (n = Partikelanzahl) Verrechnungsschritte nötig, die ihrerseits nochmal diverse Divisionen und weitere Rechnungen beinhalten. Da schlägt natürlich jeder Partikel mehr sehr stark zu Buche. Lässt man zusätzlich noch das Gitter anzeigen, werden weitere solche Schleifen durchlaufen, da jeder Gitterpunkt ähnlich wie die Partikel gegen jeden vorhandenen Partikel verrechnet werden muss. Ich finde dafür ist die Simulation sogar noch recht fix ;).

Nachti!
dizzy

TeronG 19. Jul 2004 08:55

Re: Gravitationssimulator
 
Echt Spitze die Soße :shock: :thuimb:
giebts das auch als Screensaver?? :roll:

dizzy 19. Jul 2004 11:46

Re: Gravitationssimulator
 
Noch nicht. Aber ist sicherlich recht schnell machbar, da man ja nur auf Fullscreen umfrickeln muss, und statt .exe .scr schreiben ;)

btw: gibt nen Update :)

TeronG 19. Jul 2004 11:56

Re: Gravitationssimulator
 
Zitat:

Zitat von dizzy
btw: gibt nen Update :)

:shock: UPDATE ?!?!? wo wo wo :lol:

was ich gut fände, wenn man die "Range" erweitern könnte (machbar??! KA!)... denn manchmal berühren einige "Satelliten" den Rand und folgen dann nicht mehr der "normalen" Umlaufbahn ... ist aber nicht wirklich schlimm ...

Baba ^^

PS: die erweiterte Range braucht ja nicht sichtbar zu sein ..... hmm aber is das gut, wenn dann plötzlich das gesamte geschehen außerhalb des sichtbaren Bereiches stattfindet ?? :gruebel: naja .. ich und meine Schnapsideen :P

CalganX 19. Jul 2004 12:01

Re: Gravitationssimulator
 
Hi,
extrem lustiges Teil. *g* Was mir nur stört ist, dass nur der Mauszeiger Gravitation hat. :gruebel: Stört ein wenig in der Hinsicht, dass es nicht autonom läuft. ;)

Aber sonst wirklich nett. Kenne das ja schon von TVGenial. Da habe ich vor einigen Jahren auch mal stundenlang vorgesessen. *g* Eigentlich wollte ich das selber mal programmiert haben, nur fehlten mir immer die physikalischen Grundlagen dafür. :wall:

Chris

Luckie 19. Jul 2004 12:09

Re: Gravitationssimulator
 
Man müsste noch einstellen können, wie weit die Massen beim Musklick entfernt sein sollen.

Und wie wäre es wenn man Simulationen laden und speichern könnte? Die Simulation eines Sonnensystems wäre mal interessant.

dizzy 19. Jul 2004 12:13

Re: Gravitationssimulator
 
Tja mit dem Verhalten an den Rändern ist das so eine Sache. Gibt ja schon 3 Möglichkeiten und die Sim einfach ausserhalb des Sichtbaren laufen zu lassen... ich weiss nicht *g*.

@Chak: Du willst nicht wirklich dass dein Mauszeiger wie'n Irrer unaufhaltsam um die Kreise wedelt, oder? Vor allem was mach ich dann wenn das Randverhalten auf "vernichten" steht? :shock: ;)

PS: Update im 8. Beitrag von hier nach oben.

dizzy 19. Jul 2004 12:16

Re: Gravitationssimulator
 
Zitat:

Zitat von Luckie
Man müsste noch einstellen können, wie weit die Massen beim Musklick entfernt sein sollen.

Recht einfach machbar. Beim nächsten Mal dann!

Zitat:

Zitat von Luckie
Und wie wäre es wenn man Simulationen laden und speichern könnte? Die Simulation eines Sonnensystems wäre mal interessant.

Eigentlich auch recht einfach machbar, und zu dem eine nette Idee. Mal sehen, ob ich ein paar sinnvolle Presets zusammenbekomme, weil rein zufällig ein System mit z.B. 5 stabilen Trabanten ist doch eher selten :gruebel:.

CalganX 19. Jul 2004 12:16

Re: Gravitationssimulator
 
Hi,
nein... Ich meinte eigentlich, dass man sozusagen in der Mitte eine Sonne setzt (also das Gravitationszentrum) und das da bleibt wo es ist, bzw. um weitere Gravitationszentren kreist. Und die Maus nur für die Platzierung zu ständig ist. ;)

Außerdem finde ich, sollte auch die Masse für die Partikel (ich würde sie eher Planeten nennen) einstellbar sein. ;)

Chris

Luckie 19. Jul 2004 12:18

Re: Gravitationssimulator
 
Zitat:

Zitat von dizzy
weil rein zufällig ein System mit z.B. 5 stabilen Trabanten ist doch eher selten :gruebel:.

Nun ja, für die Menschheit hat es Gott sei Dank gereicht. :zwinker:

Ich hatte es eben mal geschafft, dass eine kleine Masse in einer Ellipse um eine große rotiert ist. Genau - und da hätte ich mir eine Zoomfunktion gewünscht, weil das alles so klein war.

dizzy 19. Jul 2004 12:19

Re: Gravitationssimulator
 
Zitat:

Zitat von Chakotay1308
Hi,
nein... Ich meinte eigentlich, dass man sozusagen in der Mitte eine Sonne setzt (also das Gravitationszentrum) und das da bleibt wo es ist, bzw. um weitere Gravitationszentren kreist. Und die Maus nur für die Platzierung zu ständig ist. ;)

Dann erstell doch nen unbeweglichen Partikel? ...öhm und man platziert doch mit der Maus, oder bin ich grad völlig auf'm Holzweg :?:

Zitat:

Zitat von Chakotay1308
Außerdem finde ich, sollte auch die Masse für die Partikel (ich würde sie eher Planeten nennen) einstellbar sein. ;)

1) Wird dann kommen
2) Planeten, Partikel, naja eigentlich wurst. Ich werd drüber senieren :)

shmia 19. Jul 2004 12:46

Re: Gravitationssimulator
 
Ein weiteres mögliches Randverhalten wäre, dass die Objekte ausserhalb der Sicht einfach weiterleben und erst in sehr grosser Entfernung sterben.
Dies würde unser Universum am Besten simulieren.

Beim Erzeugen von neuen Partikeln könnte man die Anfangsgeschwindigkeit gleich dem Vektor
von MouseDown bis MouseUp setzen. Durch Klicken, Ziehen und Loslassen könnte man so Partikel
mit einer bestimmten Anfangsgeschwindigkeit erzeugen.

Luckie 19. Jul 2004 12:48

Re: Gravitationssimulator
 
Zitat:

Zitat von shmia
Beim Erzeugen von neuen Partikeln könnte man die Anfangsgeschwindigkeit gleich dem Vektor
von MouseDown bis MouseUp setzen. Durch Klicken, Ziehen und Loslassen könnte man so Partikel
mit einer bestimmten Anfangsgeschwindigkeit erzeugen.

Und dann ist man vone inem Planetensystem gar nicht mehr so weit weg.

Zerolith 19. Jul 2004 13:10

Re: Gravitationssimulator
 
hätte auch reges interesse an dem SourceCode...

ein sehr schönes programm

dizzy 19. Jul 2004 13:23

Re: Gravitationssimulator
 
Zitat:

Zitat von Luckie
Nun ja, für die Menschheit hat es Gott sei Dank gereicht. :zwinker:

:lol:

Zitat:

Zitat von Luckie
[...] eine Zoomfunktion gewünscht, weil das alles so klein war.

Mal sehen. Aber ich glaube nicht wirklich dran, dass ich eine Zoomfunktion einbaue. Wenn's mich kitzelt dann ja ;)

Zitat:

Zitat von shima
Ein weiteres mögliches Randverhalten wäre, dass die Objekte ausserhalb der Sicht einfach weiterleben und erst in sehr grosser Entfernung sterben.

Gute Idee, wird kommen!

Zitat:

Zitat von shima
Beim Erzeugen von neuen Partikeln könnte man die Anfangsgeschwindigkeit gleich dem Vektor
von MouseDown bis MouseUp setzen. Durch Klicken, Ziehen und Loslassen könnte man so Partikel
mit einer bestimmten Anfangsgeschwindigkeit erzeugen.

Im Moment macht das ein Timer mit 50ms Intervall. Er erzeugt fortlaufend den Richtungsvektor den neue Partikel mitbekommen. Ich kann aber auch noch eine "klicken-ziehen-loslassen"-Option reinbringen. Da hat man dann auch etwas mehr Kontrolle, geb ich dir Recht.

Zitat:

Zitat von Zerolith
hätte auch reges interesse an dem SourceCode...

...ist doch da!? ;)

Zerolith 19. Jul 2004 13:33

Re: Gravitationssimulator
 
hatte das mit der 2. seite net ganz verissen - sorry.

leddl 19. Jul 2004 14:21

Re: Gravitationssimulator
 
Ich find das Ding wirklich klasse, nur eines stört mich.
Und zwar hast du die Größe fix gemacht. Nich jeder hat ne Auflösung von 1024*768. Es soll auch noch einige geben, die mit ner 800er auskommen. Und außerdem bin ich einer von den Menschen, die ihre Taskleiste "2-stöckig" haben. Um das gesamt Feld zu sehen, muß ich also immer die Taskleiste verstecken.
Wär also ganz praktisch, wenn das Tool entweder komplett auf Vollbild läuft, oder zumindest in der Größe veränderbar wäre...

TeronG 19. Jul 2004 14:24

Re: Gravitationssimulator
 
Zitat:

Zitat von shima
Ein weiteres mögliches Randverhalten wäre, dass die Objekte ausserhalb der Sicht einfach weiterleben und erst in sehr grosser Entfernung sterben.

Jo .. das hatte ich eigentlich gemeint :oops:

TeronG 19. Jul 2004 18:30

Re: Gravitationssimulator
 
Wenn ich bei der neuen Version während des laufens auf Beenden (X) klicke stürzt das Proggi mit folgender meldung ab:
Zugriffsverletzung bei Adresse 0045B374 in Modul 'GravSim.exe'. lesen von Adresse 0000000C.

Konnte das schon auf 2 XP-Systemen testen ...

dizzy 19. Jul 2004 20:34

Re: Gravitationssimulator
 
oopsie, ja das kann durchaus sein :oops:
In der alten Version hatte ich OnClose das Simulator-Objekt nicht freigegeben, was jetzt aber geschieht. Leider ist es wohl so, dass die OnClose-Routine beim Click auf [X] ausgeführt wird, aber das eigentliche Schließen nicht, da das Programm ohne Click auf [Stop] in einer Schleife hängt. Also wird das Objekt freigegeben, aber die Schleife greift weiter fröhlich darauf zu...
Ist aber so leicht zu beheben, dass es dafür kein eigenes Update geben wird ;). Das einfachste ist es halt immer vorm Click auf [X] auf [Stop] zu clicken... Das Fenster geht sonst eh nicht zu ;).

Wird aber behoben! Danke für den Tipp!

gruss,
dizzy

MathiasH 19. Jul 2004 21:08

Re: Gravitationssimulator
 
echt amüsant des Teil, aber ist es zwingend notwenidig, dass es die CPU Last auf 100% treibt, selst wen noch kein einziges Teilchen da ist? ba einfach enen frame limiter ein.
in etwa so:
Delphi-Quellcode:
frames: integer; //frames seit dem Anbruch der letzten Sekunde
lastsec: integer; //letzte ganze Sekunde

while frames/(gettickcount - lastsec)*1000 > 60 do sleep(1);
inc(frames);
while gettickcount - lastsec > 1000 do begin //schleife hat den sinn, hänger abzufangen, man könnte hier auch mit 0 setzen arbeiten, ist aber ungenauer
  inc(lastsec, 1000);
  frames := 0;
end;
ich hoffe ich hab keinen Käs gebaut ;)

PS bei jedem 10. Frame würd ich mindestens ein Processmessages einbauen, in dem eine abbruchbedingung erfüllt werden kann (button click etc.)

Die Physik interessiert mich eher weniger, sowas in der Art programmier ich zur Zeit in langweiligen Physikstunden...

MathiasH

dizzy 19. Jul 2004 21:26

Re: Gravitationssimulator
 
Zitat:

Zitat von MathiasH
ist es zwingend notwenidig, dass es die CPU Last auf 100% treibt, selst wen noch kein einziges Teilchen da ist?

Naja, die Schleife knallt halt die ganze Zeit durch. Und das ist ja jetzt nicht unbedingt ein Proggy das man stundenlang rennen lässt. Für den Einsatz eines Framelimiters müsse ich recht viel umbauen, und sobald es genügend Partikel sind stört der Overhead wieder. Das Proggy wird von alleine schon langsam genug :)

Zitat:

Zitat von MathiasH
PS bei jedem 10. Frame würd ich mindestens ein Processmessages einbauen, in dem eine abbruchbedingung erfüllt werden kann (button click etc.)

...dann schau mal in den Code ;). Jedes Frame ein ProcessMessages. Sonst könntest du während der Sim auch nicht an den Reglern fummeln, Partikel reinclicken usw.

Zitat:

Zitat von MathiasH
Die Physik interessiert mich eher weniger

Das einzige bischen Physik was da überhaupt mitspielt ist die Tatsache dass sich Kräfte mit 1/r² in ihrer Wirkung ausbreiten. Der Rest ist ganz banales Addieren von Vektoren, und vielleicht doch noch das Dingen mit der Impulserhaltung. Das war's schon :)


gruss,
dizzy

Tubos 19. Jul 2004 21:35

Re: Gravitationssimulator
 
Hmmm, so auf die Schnelle fallen mir zwei Dinge ein:

1) Das Programm ist geil!! :D

2) Die Performance ist besch***** :stupid:

Auf meinem langsamen Rechner hat das extrem geruckelt...aber wie gesagt: das Programm ist genial :thuimb:


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:05 Uhr.
Seite 1 von 2  1 2      

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