Autor Beitrag
Matty92
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 34



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1555
Erhaltene Danke: 70

Win7 Enterprise 64bit, Win XP SP2
Turbo Delphi
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1085
Erhaltene Danke: 53

WinXP, Win7, Win10
Delphi 7 Enterprise, XE
BeitragVerfasst: Mo 22.03.10 22:53 
user profile iconMatty92
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 :wink:
Gruss ALf

_________________
Wenn jeder alles kann oder wüsste und keiner hätt' ne Frage mehr, omg, währe dieses Forum leer!
Matty92 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 34



BeitragVerfasst: Mo 22.03.10 23:23 
user profile iconBoldar hat folgendes geschrieben Zum zitierten Posting springen:
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 :).


user profile iconALF hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconMatty92
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 :wink:
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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2242
Erhaltene Danke: 55

Win10
VS Code, Delphi 2010 Prof.
BeitragVerfasst: Mo 22.03.10 23:25 
Hi, und :welcome: im Delphi-Forum :)

Bitte ändere doch den Titel noch gerade, du scheinst einfach weitergetippt zu haben, als das Editfeld voll war :zwinker:

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.]

user profile iconMatty92 hat folgendes geschrieben Zum zitierten Posting springen:
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 :think:.
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).

user profile iconMatty92 hat folgendes geschrieben Zum zitierten Posting springen:
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. :mrgreen:



(Okay, ich sag' dir auch ein bisschen dazu, wie :P.)
[*]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).
ausblenden 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);
  {.. Spuren einzeichnen, beispielsweise aus zweiter Bitmap mit Stretchdraw und Transparent := true,
  oder die Spuren als Punktliste in einem Array udn dann per Canvas.LineTo.}

end;


user profile iconMatty92 hat folgendes geschrieben Zum zitierten Posting springen:
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.

user profile iconMatty92 hat folgendes geschrieben Zum zitierten Posting springen:
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? :P). 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
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1555
Erhaltene Danke: 70

Win7 Enterprise 64bit, Win XP SP2
Turbo Delphi
BeitragVerfasst: Mo 22.03.10 23:25 
Für Andorra empfehle ich folgendes Tutorial:
andorra.sourceforge....dex.php?bb=tutot1ger
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: 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 user defined image oder user defined image 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 34



BeitragVerfasst: Di 23.03.10 00:20 
user profile iconHidden hat folgendes geschrieben Zum zitierten Posting springen:
Hi, und :welcome: im Delphi-Forum :)

Bitte ändere doch den Titel noch gerade, du scheinst einfach weitergetippt zu haben, als das Editfeld voll war :zwinker:

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 :zustimm:, 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 :D.

user profile iconHidden hat folgendes geschrieben Zum zitierten Posting springen:

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 :think:.
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.

user profile iconHidden hat folgendes geschrieben Zum zitierten Posting springen:

[*]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.

user profile iconHidden hat folgendes geschrieben Zum zitierten Posting springen:

[*]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.

user profile iconHidden hat folgendes geschrieben Zum zitierten Posting springen:

[*]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).
ausblenden 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);
  {.. Spuren einzeichnen, beispielsweise aus zweiter Bitmap mit Stretchdraw und Transparent := true,
  oder die Spuren als Punktliste in einem Array udn dann per Canvas.LineTo.}

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?

user profile iconHidden hat folgendes geschrieben Zum zitierten Posting springen:

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 ;).

user profile iconHidden hat folgendes geschrieben Zum zitierten Posting springen:


Zeichnen, ja: Paintbox1.Canvas.LineTo ;) (oder was war die Frage? :P). 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 ;).

user profile iconBoldar hat folgendes geschrieben Zum zitierten Posting springen:
Für Andorra empfehle ich folgendes Tutorial:
andorra.sourceforge....dex.php?bb=tutot1ger

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 :P

user profile iconNarses hat folgendes geschrieben Zum zitierten Posting springen:
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 user defined image oder user defined image 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 :) :zustimm:.
Xion
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
EE-Maler
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)
BeitragVerfasst: So 25.04.10 09:44 
user profile iconMatty92 hat folgendes geschrieben Zum zitierten Posting springen:

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.

user profile iconMatty92 hat folgendes geschrieben Zum zitierten Posting springen:

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...

user profile iconMatty92 hat folgendes geschrieben Zum zitierten Posting springen:

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.

user profile iconMatty92 hat folgendes geschrieben Zum zitierten Posting springen:

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.

user profile iconMatty92 hat folgendes geschrieben Zum zitierten Posting springen:

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?)

user profile iconMatty92 hat folgendes geschrieben Zum zitierten Posting springen:

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.

user profile iconMatty92 hat folgendes geschrieben Zum zitierten Posting springen:

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 :mrgreen: 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)