![]() |
Gravitationssimulator
Liste der Anhänge anzeigen (Anzahl: 1)
Ein Zitat aus
![]() Zitat:
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! |
Re: Gravitationssimulator
endgeil !!!!
ich will auf jeden fall den source |
Re: Gravitationssimulator
Sehr schick... gefällt mir... Muss aber wahninnig kompliziert sein... respect!
|
Re: Gravitationssimulator
cool, gut auch die farbänderung, interresant wäre auch abschalten von randreflexion und vereinigung von mausmasse mit der übrigen...
|
Re: Gravitationssimulator
wenn ich z.B. 100 Partikel erstelle und das ganz nah am rand, kleben die da oben fest.
sonst endgeil |
Re: Gravitationssimulator
:shock: Cool :!:
Saubere Arbeit, muss ich sagen :thuimb: Kannst ja mal den Source posten ;-) |
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? |
Re: Gravitationssimulator
Coole Sache das :thuimb: :mrgreen:
Wie währe es denn mit einer positionierbaren Masse?? |
Re: Gravitationssimulator
Zitat:
|
Re: Gravitationssimulator
Zitat:
|
Re: Gravitationssimulator
... kannst du dir ja selber erklären aus masse und zentrifugalkraft
|
Re: Gravitationssimulator
Zitat:
[OnTopic] Irgendwie hat das prog probleme mit dem start und abbrechen buttons bzw. beenden! |
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:
und die Buttons schalten jeweils nur die Flags.
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; \\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 |
Re: Gravitationssimulator
Zitat:
Zitat:
Delphi-Quellcode:
Und wenn du zu anderen apps wechselst, dann wird der game loop ausser kraft gesetz.
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; Zitat:
|
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 |
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... |
Re: Gravitationssimulator
Delphi-Quellcode:
Optimiert hier der Delphi Compiler so schlecht? :gruebel:
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; Nachtrag: Bei sehr vielen Partikeln leidet die Performance doch recht stark. :roll: |
Re: Gravitationssimulator
Zitat:
\\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:
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 |
Re: Gravitationssimulator
Echt Spitze die Soße :shock: :thuimb:
giebts das auch als Screensaver?? :roll: |
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 :) |
Re: Gravitationssimulator
Zitat:
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 |
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 |
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. |
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. |
Re: Gravitationssimulator
Zitat:
Zitat:
|
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 |
Re: Gravitationssimulator
Zitat:
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. |
Re: Gravitationssimulator
Zitat:
Zitat:
2) Planeten, Partikel, naja eigentlich wurst. Ich werd drüber senieren :) |
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. |
Re: Gravitationssimulator
Zitat:
|
Re: Gravitationssimulator
hätte auch reges interesse an dem SourceCode...
ein sehr schönes programm |
Re: Gravitationssimulator
Zitat:
Zitat:
Zitat:
Zitat:
Zitat:
|
Re: Gravitationssimulator
hatte das mit der 2. seite net ganz verissen - sorry.
|
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... |
Re: Gravitationssimulator
Zitat:
|
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 ... |
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 |
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:
ich hoffe ich hab keinen Käs gebaut ;)
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; 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 |
Re: Gravitationssimulator
Zitat:
Zitat:
Zitat:
gruss, dizzy |
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 18:25 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 by Thomas Breitkreuz