Autor |
Beitrag |
Matty92
      
Beiträge: 34
|
Verfasst: Mo 22.03.10 22:42
Hallo Delphi-Forum  ,
ich schreibe demnächst meine Facharbeit zum Dreikörperproblem und dessen Simulation mit dem Computer.
Im Moment stehe ich noch vor der Wahl der Programmiersprache. Am naheliegendsten wäre da Delphi, da ich das auch in Informatik habe, allerdings haben wir noch nicht mit GUIs angefangen, ich selbst hab nur bisschen Grundwissen darin.
Also, zu den Fragen:
1) Beim Zeichnen der Planetenbahnen friert das Programm solange ein, bis die Schleife fertig ist, ich will es aber in einer Endlossschleife, bzw. mit Abbruchknopf schreiben, auch soll während die Schleife läuft Änderungen an den Massen möglich sein, kann man das Einfrieren umgehen (zeichnen tue ich momentan in einer Paintbox).
2) Lässt sich ein einfacher 3D-Raum integrieren, der sich mit Pfeiltasten/Maus drehen lässt (keine Texturen, nur Punkte zeichnen mit x,y,z)?
3) Kann man mit der Maus die Planeten im 2D/3D-Raum platzieren?
4) Kann man die Farbe der Spuren nachträglich ändern, bzw. die Spuren an- und ausschalten ohne alles neuzuzeichnen?
5) Wie sieht es mit der Abwärtskompatibilität aus, ich habe erfahren, dass der betreuende Physiklehrer noch einen Rechner mit Win95 oder Win98 verwendet, ich dagegen Win7 64bit, und Delphi (2005PE und Delphi 7) laufen in einer VM mit WinXP, ich kann aber, und werde eine kleinere, abgespeckte Version machen, die sich nur auf das wesentliche beschränkt.
6) Ein anderes Thema sind die Keplerschen Gesetze, die ich damit überprüfen werde, z.B. der Flächensatz, kann man in bestimmten Zeitabständen eine Linie Planet-Zentralkörper zeichnen lassen und dann die Fläche dazwischen abmessen (Pixel zählen)?
Lassen sich diese Fragen ohne größeren Aufwand lösen, d.h. dass das Programm nicht von der Größe und Rechenaufwand unnötig aufgebläht wird (von den eigentlichen Berechnungen zu den Positionen abgesehen), wenn ja, könnt ihr mir Tipps geben, keine vollständigen Lösungen, oder sollte ich mich mit einer anderen Programmiersprache versuchen?
In Turbopascal habe ich bis jetzt ein einfaches Programm zum eingeschränkten Zweikörperproblem geschrieben, das wäre die einfachste Möglichkeit, würde aber vieles Beschränken.
Viele Grüße,
Matty
Zuletzt bearbeitet von Matty92 am Mo 22.03.10 23:49, insgesamt 1-mal bearbeitet
|
|
Boldar
      
Beiträge: 1555
Erhaltene Danke: 70
Win7 Enterprise 64bit, Win XP SP2
Turbo Delphi
|
Verfasst: Mo 22.03.10 22:45
Mal ganz kurz und grundsätzlich:
Wenn du nicht gerade Treiber oder ein Betribssystem(C) schreiben willst, kannst du alles mit Delphi genausogut machen wie mit C oder so.
Abwärtskompatibilität sollte man auch hinkriegen.
Wenn du was aufwendigeres Zeichnen willst, solltest du dir vielleicht mal eine der vielen 2D-Engines ansehen, z.B. Andorra2D.
Ansonsten Threads.
|
|
ALF
      
Beiträge: 1085
Erhaltene Danke: 53
WinXP, Win7, Win10
Delphi 7 Enterprise, XE
|
Verfasst: Mo 22.03.10 22:53
Matty92 Zitat: | ...ich schreibe demnächst meine Facharbeit ... |
kommt aber auch darauf an wieviel Zeit Du noch hast?
Lösbar ist alles! Zeit muss man aber auch haben!
Atthock mh...., hängt von Deinen Kenntnissen in Delphi ab
Gruss ALf
_________________ Wenn jeder alles kann oder wüsste und keiner hätt' ne Frage mehr, omg, währe dieses Forum leer!
|
|
Matty92 
      
Beiträge: 34
|
Verfasst: Mo 22.03.10 23:23
Boldar hat folgendes geschrieben : | Mal ganz kurz und grundsätzlich:
Wenn du nicht gerade Treiber oder ein Betribssystem(C) schreiben willst, kannst du alles mit Delphi genausogut machen wie mit C oder so.
Abwärtskompatibilität sollte man auch hinkriegen.
Wenn du was aufwendigeres Zeichnen willst, solltest du dir vielleicht mal eine der vielen 2D-Engines ansehen, z.B. Andorra2D.
Ansonsten Threads. |
Hi Boldar,
hm, ok, Treiber werden es nicht, was das zeichnen betrifft, ich habe nach der Berechnung einfach x,y(,z)-Koordinaten, nicht mehr.
Aber die Andorra2D-Engine werd ich mir mal angucken  .
ALF hat folgendes geschrieben : | Matty92 Zitat: | ...ich schreibe demnächst meine Facharbeit ... |
kommt aber auch darauf an wieviel Zeit Du noch hast?
Lösbar ist alles! Zeit muss man aber auch haben!
Atthock mh...., hängt von Deinen Kenntnissen in Delphi ab
Gruss ALf |
Hi Alf,
Zeit haben habe ich bis Mitte/Ende Mai, ist also noch lange hin. Das Problem ist, ich habe noch keine Vorstellung/Idee, wie ich z.B. das Problem mit dem Einfrieren lösen kann, oder löst sich das automatisch, wenn ich z.B. das Andorra2D benutze?
Viele Grüße,
Matty
|
|
Hidden
      
Beiträge: 2242
Erhaltene Danke: 55
Win10
VS Code, Delphi 2010 Prof.
|
Verfasst: Mo 22.03.10 23:25
Hi, und  im Delphi-Forum
Bitte ändere doch den Titel noch gerade, du scheinst einfach weitergetippt zu haben, als das Editfeld voll war
E: [Was das Zeitlimit angeht, kann ich dir von meiner Facharbeit letztes Jahr sagen: Früh loslegen. Wenn das Konzept beim ersten Beratungsgespräch schon solide und komplex ist, bist du schonmal sicher im oberen Notendrittel. Und es fühlt sich gut an, vor statt hinter dem Zeitplan zu sein. ]
Matty92 hat folgendes geschrieben : | 1) Beim Zeichnen der Planetenbahnen friert das Programm solange ein, bis die Schleife fertig ist, ich will es aber in einer Endlossschleife, bzw. mit Abbruchknopf schreiben, auch soll während die Schleife läuft Änderungen an den Massen möglich sein, kann man das Einfrieren umgehen (zeichnen tue ich momentan in einer Paintbox). |
Jop: Wenn du in deiner Schleife Application.ProcessMessages; aufrufst, wird das Formular wieder reagieren.
Dann musst du aber verhindern, dass der Start-Button noch einmal gedrückt wird  .
Eine andere Lösung wäre ein TTimer-Objekt, in dem dann jeweils 10 Bewegungsschritte gemacht werden. Stichwort: Time-Based-Movement. Der Vorteil davon wäre, dass dein Programm auf allen Rechnern gleich schnell zeichnet(würde ich also wählen).
Matty92 hat folgendes geschrieben : | 2) Lässt sich ein einfacher 3D-Raum integrieren, der sich mit Pfeiltasten/Maus drehen lässt (keine Texturen, nur Punkte zeichnen mit x,y,z)?
3) Kann man mit der Maus die Planeten im 2D/3D-Raum platzieren?
4) Kann man die Farbe der Spuren nachträglich ändern, bzw. die Spuren an- und ausschalten ohne alles neuzuzeichnen? |
Ja.
(Okay, ich sag' dir auch ein bisschen dazu, wie  .)
[*]OpenGL kann, muss dann aber nicht. Die Rechnungen kannst du auch selber machen(Drehungen und Projektion auf 2D-Ebene), und dann wie gewohnt in die Paintbox zeichnen.
[*]Die Paintbox sagt dir ja die Koordinaten des Mausklicks. Im 3D-Raum kann mit dem Klick aber jeder Punkt auf einer Geraden senkrecht zur xy-Ebene gemeint gewesen sein, also musst du dann das Koordinatensystem noch leicht drehen und den letzten Freiheitsgrad festlegen.
[*]Du musst nicht alles neuzeichnen: Die von den Spuren unabhängien Komponenten des Bildes("Hintergrund") hält man gewöhnlicherweise in einer Bitmap im Speicher(Klasse TBitmap).
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| type TForm1 = class(TForm) private FBackground: TBitmap; end;
procedure TForm1.Paintbox1Repaint(Sender: TObject); begin Paintbox1.Canvas.Stretchdraw(FBackground, Paintbox1.ClientRect); end; |
Matty92 hat folgendes geschrieben : | 5) Wie sieht es mit der Abwärtskompatibilität aus, ich habe erfahren, dass der betreuende Physiklehrer noch einen Rechner mit Win95 oder Win98 verwendet, ich dagegen Win7 64bit, und Delphi (2005PE und Delphi 7) laufen in einer VM mit WinXP, ich kann aber, und werde eine kleinere, abgespeckte Version machen, die sich nur auf das wesentliche beschränkt. |
Das kann und darf kein Bewertungskriterium sein. Aber mit Problemen würde ich da nicht rechnen. Zumal er ja den Quelltext hat, und selbst kompillieren kann.
Matty92 hat folgendes geschrieben : | 6) Ein anderes Thema sind die Keplerschen Gesetze, die ich damit überprüfen werde, z.B. der Flächensatz, kann man in bestimmten Zeitabständen eine Linie Planet-Zentralkörper zeichnen lassen und dann die Fläche dazwischen abmessen (Pixel zählen)? |
Zeichnen, ja: Paintbox1.Canvas.LineTo  (oder was war die Frage?  ). Mach' das Messen mathematisch(Polygon mit den einzelnen, bekannten Ortspunkten dürfte gehen).
lg,
PS: Für genauere Fragen zu den einzelnen Punkten solltest du, falls nötig, einzelne Themen erstellen. Die Diskussion zu vieler Fragen in einem Thread führt wohl zu Verwirrungen.
_________________ Centaur spears can block many spells, but no one tries to block if they see that the spell is a certain shade of green. For this purpose it is useful to know some green stunning hexes. (HPMoR)
Zuletzt bearbeitet von Hidden am Mo 22.03.10 23:28, insgesamt 1-mal bearbeitet
|
|
Boldar
      
Beiträge: 1555
Erhaltene Danke: 70
Win7 Enterprise 64bit, Win XP SP2
Turbo Delphi
|
Verfasst: Mo 22.03.10 23:25
Für Andorra empfehle ich folgendes Tutorial:
andorra.sourceforge....dex.php?bb=tutot1ger
|
|
Narses
      

Beiträge: 10183
Erhaltene Danke: 1256
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Mo 22.03.10 23:47
Moin!
Bitte ändere den Titel des Topics, da er wenig über das eigentlich Thema verrät. Hier der entsprechende Absatz aus den Richtlinien:
1.2 Beiträge: | Bitte formuliere den Betreff Deiner Beiträge so, dass andere Mitglieder anhand dieser bereits das eigentliche Thema festmachen können. Beiträge wie etwa "Eine Anfängerfrage" oder "Weiß jemand, wie das geht?" lassen den Leser im Unklaren darüber, was das Thema der Diskussion ist.[...] |
Einfach oben bei Deinem ersten Beitrag auf  oder  klicken und den Titel ändern. Danke Dir!
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
Matty92 
      
Beiträge: 34
|
Verfasst: Di 23.03.10 00:20
Hidden hat folgendes geschrieben : | Hi, und im Delphi-Forum
Bitte ändere doch den Titel noch gerade, du scheinst einfach weitergetippt zu haben, als das Editfeld voll war
E: [Was das Zeitlimit angeht, kann ich dir von meiner Facharbeit letztes Jahr sagen: Früh loslegen. Wenn das Konzept beim ersten Beratungsgespräch schon solide und komplex ist, bist du schonmal sicher im oberen Notendrittel. Und es fühlt sich gut an, vor statt hinter dem Zeitplan zu sein.]
|
Hi Hidden,
danke für das Willkommen  , den Titel hab ich gerade geändert, das Konzept der Facharbeit werde ich mit meinem Lehrer nach den Osterferien besprechen, aber um ehrlich zu sein hatte ich immer Probleme mit Zeitplänen, ohne die war ich schneller fertig als mit  .
Hidden hat folgendes geschrieben : |
Jop: Wenn du in deiner Schleife Application.ProcessMessages; aufrufst, wird das Formular wieder reagieren.
Dann musst du aber verhindern, dass der Start-Button noch einmal gedrückt wird .
Eine andere Lösung wäre ein TTimer-Objekt, in dem dann jeweils 10 Bewegungsschritte gemacht werden. Stichwort: Time-Based-Movement. Der Vorteil davon wäre, dass dein Programm auf allen Rechnern gleich schnell zeichnet(würde ich also wählen).
|
Hm, ok danke für den Tipp, die Verwendung des TTimer-Objektes scheint ja nicht so kompliziert zu sein, das Time-Based-Movement sieht schon etwas komplizierter aus.
Hidden hat folgendes geschrieben : |
[*]OpenGL kann, muss dann aber nicht. Die Rechnungen kannst du auch selber machen(Drehungen und Projektion auf 2D-Ebene), und dann wie gewohnt in die Paintbox zeichnen.
|
Ok, das werd ich mir auch mal ansehen, hab aber eben auch noch Rage3D gefunden.
Hidden hat folgendes geschrieben : |
[*]Die Paintbox sagt dir ja die Koordinaten des Mausklicks. Im 3D-Raum kann mit dem Klick aber jeder Punkt auf einer Geraden senkrecht zur xy-Ebene gemeint gewesen sein, also musst du dann das Koordinatensystem noch leicht drehen und den letzten Freiheitsgrad festlegen.
|
Oder in zwei Schritten, erst xy-Koordinaten festlegen, wie in der Paintbox, und dann durch ziehen die z-Koordinate.
Hidden hat folgendes geschrieben : |
[*]Du musst nicht alles neuzeichnen: Die von den Spuren unabhängien Komponenten des Bildes("Hintergrund") hält man gewöhnlicherweise in einer Bitmap im Speicher(Klasse TBitmap).
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| type TForm1 = class(TForm) private FBackground: TBitmap; end;
procedure TForm1.Paintbox1Repaint(Sender: TObject); begin Paintbox1.Canvas.Stretchdraw(FBackground, Paintbox1.ClientRect); end; |
|
Ok, danke. Das mit den Punkten im Array speichern hatte ich mir auch schon überlegt. Wie viel Speicherplatz braucht denn ein "Punkt" etwa, mit Koordinaten, Planetenzugehörigkeit (durch z.B. Zahlen wie 1,2,3 z.B.) und Farbe?
Hidden hat folgendes geschrieben : |
Das kann und darf kein Bewertungskriterium sein. Aber mit Problemen würde ich da nicht rechnen. Zumal er ja den Quelltext hat, und selbst kompillieren kann.
|
Ne, das ist kein Bewertungskriterium, keine Angst  .
Hidden hat folgendes geschrieben : |
Zeichnen, ja: Paintbox1.Canvas.LineTo (oder was war die Frage? ). Mach' das Messen mathematisch(Polygon mit den einzelnen, bekannten Ortspunkten dürfte gehen).
lg,
PS: Für genauere Fragen zu den einzelnen Punkten solltest du, falls nötig, einzelne Themen erstellen. Die Diskussion zu vieler Fragen in einem Thread führt wohl zu Verwirrungen. |
Oder ich messe den Abstand Zentralkörper-Planet in Pixeln von jedem neuen Punkt des Planeten aus und addiere dass dann auf, näherungsweise müsste dass dann dem mathematischen Ergebnis recht nahe kommen  .
Einzelne Threads werde ich dann aufmachen, wenn ich bei den einzelnen Programmierschritten angekommen sind und ich Probleme habe, mir ging es hier nurmal erst um allgemeine Beantwortung  .
Ja, danke  . Das Tutorial hatte ich eben mal Überflogen, mithilfe der Partikel könnte ich sogar (als Spielerei) den Plasma- und Staubschweif eines Kometen einbauen
Narses hat folgendes geschrieben : | Moin!
Bitte ändere den Titel des Topics, da er wenig über das eigentlich Thema verrät. Hier der entsprechende Absatz aus den Richtlinien:
1.2 Beiträge: | Bitte formuliere den Betreff Deiner Beiträge so, dass andere Mitglieder anhand dieser bereits das eigentliche Thema festmachen können. Beiträge wie etwa "Eine Anfängerfrage" oder "Weiß jemand, wie das geht?" lassen den Leser im Unklaren darüber, was das Thema der Diskussion ist.[...] | Einfach oben bei Deinem ersten Beitrag auf oder klicken und den Titel ändern. Danke Dir!
cu
Narses |
Moin Narses,
ja, habs geändert, die erste Hälfte des Titels wurde geschluckt  .
Danke nochmal für die Antworten, Boldar, Alf und Hidden  .
P.s.: Das was in der Titelbar der Forumsstartseite steht, stimmt wirklich, ihr seid freundlich  .
|
|
Xion
      

Beiträge: 1952
Erhaltene Danke: 128
Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
|
Verfasst: So 25.04.10 09:44
Matty92 hat folgendes geschrieben : |
1) Beim Zeichnen der Planetenbahnen friert das Programm solange ein, bis die Schleife fertig ist, ich will es aber in einer Endlossschleife, bzw. mit Abbruchknopf schreiben, auch soll während die Schleife läuft Änderungen an den Massen möglich sein, kann man das Einfrieren umgehen (zeichnen tue ich momentan in einer Paintbox).
|
Würde ich per Timer machen. Timebased Movement am besten, d.h. beim Timer-Aufruf guckst, wieviel Zeit wirklich vergangen ist und arbeitest damit (GetTickCount). Du kannst ja dann auch die Berechnung mehrfach aufrufen, wenn die Zeitdifferenz zu groß/ungenau ist.
Matty92 hat folgendes geschrieben : |
2) Lässt sich ein einfacher 3D-Raum integrieren, der sich mit Pfeiltasten/Maus drehen lässt (keine Texturen, nur Punkte zeichnen mit x,y,z)? |
Hab ich damals mit OpenGL (DGL) gemacht...
Matty92 hat folgendes geschrieben : |
3) Kann man mit der Maus die Planeten im 2D/3D-Raum platzieren? |
Das ist bei allen 3D-Programmen immer Mist. Das beste wäre noch, du verschiebst per Maus in x/y richtung und dann drückst du die Maustaste und verschiebst dann beim bewegen in z richtung oder so.
Matty92 hat folgendes geschrieben : |
4) Kann man die Farbe der Spuren nachträglich ändern, bzw. die Spuren an- und ausschalten ohne alles neuzuzeichnen? |
OpenGL zeichnet z.B. immer alles neu. In ner Paintbox Sachen löschen ist immer tricky. Und langsam.
Matty92 hat folgendes geschrieben : |
5) Wie sieht es mit der Abwärtskompatibilität aus, ich habe erfahren, dass der betreuende Physiklehrer noch einen Rechner mit Win95 oder Win98 verwendet, ich dagegen Win7 64bit, und Delphi (2005PE und Delphi 7) laufen in einer VM mit WinXP, ich kann aber, und werde eine kleinere, abgespeckte Version machen, die sich nur auf das wesentliche beschränkt. |
Mit delphi an sich sollte es kein Problem geben. Wenn du OpenGL/DirectX verwendest müsstest du sicherstellen, dass die Versionen auf Win95 für dein Programm ausreichen (directX7 oder was haben die?)
Matty92 hat folgendes geschrieben : |
6) Ein anderes Thema sind die Keplerschen Gesetze, die ich damit überprüfen werde, z.B. der Flächensatz, kann man in bestimmten Zeitabständen eine Linie Planet-Zentralkörper zeichnen lassen und dann die Fläche dazwischen abmessen (Pixel zählen)? |
Nee, das machst du anders. Du nimmst beide Vektoren und rechnest dann mathematisch die Fläche aus. (Segment einer Ellipse) Gibts sicher Formeln dazu.
Matty92 hat folgendes geschrieben : |
Lassen sich diese Fragen ohne größeren Aufwand lösen, d.h. dass das Programm nicht von der Größe und Rechenaufwand unnötig aufgebläht wird (von den eigentlichen Berechnungen zu den Positionen abgesehen), wenn ja, könnt ihr mir Tipps geben, keine vollständigen Lösungen, oder sollte ich mich mit einer anderen Programmiersprache versuchen? |
Ich hatte damals das Problem (ich hatte ca. 40 Körper), dass irgendwann der Rechner in die Knie geht oder die Berechnungsschritte zu groß werden. Ich hab mir damals damit geholfen, die Monde nicht als Gravitationsquelle zu rechnen (als Option).
Fazit: Ich habs damals mit OpenGL gemacht. Hübsch in 3D, auch mit Texturen usw. Allerdings schaffst du das niemals bis Ende Mai. Wie immer ist nicht das Grundgerüst das Problem, sondern die Feinheiten  Ich hatte den Vorteil, nen halbes Jahr vor Abgabetermin schon ne fertige 2D-Version (mit DirectX) zu haben. Und trotzdem hab ich dann bis zum letzten Tag noch dran rumgebastelt (ich erinner mich da an ne Aktion, die nacht vor der Abgabe noch die Spuren der Planeten eingebaut zu haben...bis Nachts um 2Uhr oder so...aber war sogar bug-frei am Ende  )
_________________ a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
|
|
|