Autor Beitrag
Tilo
ontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 1098
Erhaltene Danke: 13

Win7 geg. WInXP oder sogar Win98
Rad2007
BeitragVerfasst: Do 15.01.04 16:05 
Ähm, :oops: Ich habe schon mal In Flash versuch das Sonnensystem darzustellen, bin dann aber beim Saturn bei den Moden Stecken geblieben(Zuviele Layers falls das jemanden etwas sagt :evil: )
Nun probiere Ich es in Delphi, habe aber das Problem, das Merkur anfängt zu blinken :roll:
Hier ist der Code( :arrow: benötigt noch eine Timerkomponente mit Intervall:=1):
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
141:
142:
143:
144:
145:
146:
147:
148:
149:
150:
151:
unit Planeten_3;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs,OpenGl12, ExtCtrls,Planeten_2, StdCtrls;

type
 TPlanet = record
  Xpos,Zpos:extended;
  radius:integer;
  Xspeed,Zspeed:extended;
  Masse:extended;
  Name:string;
  red,green,blue:single;
 end;
  TForm1 = class(TForm)
    Timer1: TTimer;
    procedure FormCreate(Sender: TObject); 
    procedure InitGL;
    procedure SetDCPixelFormat(Handle: HDC);
    procedure Timer1Timer(Sender: TObject);

  private 
    { Private-Deklarationen } 
  public 
    { Public-Deklarationen } 
  end; 



var 

  Form1: TForm1;
  h_DC: hDC;
  hRC: HGLRC;

  Planet: array[1..9] of TPlanet;
  xpos,ypos,zpos:integer;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
form1.Resizing(wsmaximized);
InitOpenGL;
h_DC:=GetDC(Handle);
SetDCPixelFormat(h_DC);
hRC:=wglCreateContext(h_DC);
wglMakeCurrent(h_DC,hRC);
InitGL;
xpos:=-1000; ypos:=0;zpos:=-5000;
//PlanetenDaten
Planet[1].Name:='Merkur';
Planet[1].Xpos:=579;
Planet[1].ZPos:=0;
Planet[1].Zspeed:=47.9;
Planet[1].XSpeed:=47.9;
Planet[1].Masse:=0.34;
Planet[1].red:=1;
Planet[1].green:=0;
Planet[1].blue:=1;
Planet[1].radius:=22;

end;

procedure TForm1.InitGL;
begin
  glClearColor(0,0,0,0);
  glClearDepth(1);
  glDepthFunc(GL_LESS);
  glShadeModel(GL_SMOOTH);
  glEnable(GL_DEPTH_TEST);

  glViewport(0,0,Width,Height);
  glMatrixMode(GL_PROJECTION);
  glLoadIdentity;
  gluPerspective(45,Width/Height,1,100000);
  glMatrixMode(GL_MODELVIEW);
end;

procedure TForm1.SetDCPixelFormat(Handle: HDC);
var
  nPixelFormat: GLUint;
const
  pfd: PIXELFORMATDESCRIPTOR = (
      nSize: sizeof( PIXELFORMATDESCRIPTOR );
      nVersion: 1;
      dwFlags: PFD_DRAW_TO_WINDOW
      or PFD_SUPPORT_OPENGL
      or PFD_DOUBLEBUFFER;
      iPixelType: PFD_TYPE_RGBA;
      cColorBits: 16;
      cRedBits: 0;
      cRedShift: 0;
      cGreenBits: 0;
      cBlueBits: 0;
      cBlueShift: 0;
      cAlphaBits: 0;
      cAlphaShift: 0;
      cAccumBits: 0;
      cAccumRedBits: 0;
      cAccumGreenBits: 0;
      cAccumBlueBits: 0;
      cAccumAlphaBits: 0;
      cDepthBits: 16;
      cStencilBits: 0;
      cAuxBuffers: 0;
      iLayerType: PFD_MAIN_PLANE;
      bReserved: 0;
      dwLayerMask: 0;
      dwVisibleMask: 0;
      dwDamageMask: 0
  );
begin
    nPixelFormat:=ChoosePixelFormat(h_DC, @pfd);
    SetPixelFormat(h_DC,nPixelFormat,@pfd);
  end;

procedure TForm1.Timer1Timer(Sender: TObject);
var
a:integer;
begin
  glClear(GL_COLOR_BUFFER_BIT OR GL_DEPTH_BUFFER_BIT);
  glLoadIdentity;
  gltranslate(xpos,ypos,zpos);
  glColor3f(1,1,0);
  glusphere(gluNewQuadric,350,100,100);
  for a:=1 to 9 do
  begin
   glPushMatrix;
   gltranslate(Planet[a].Xpos,0,Planet[a].Zpos);
   glColor3f(Planet[a].red,Planet[a].green,Planet[a].blue);
   glusphere(gluNewQuadric,Planet[a].radius,100,100);
   glpopMatrix;
  end;
  Planet[1].Xspeed:=Planet[1].Xspeed-(((6.67259*10E-11)*(1.99*10E+30*Planet[1].Masse*10E+24)/sqr(Planet[1].Xpos*10E+5))/(Planet[1].Masse*10E+24)/10000);
  if Planet[1].Xpos<0

  then
   Planet[1].Xpos:=Planet[1].Xpos-Planet[1].XSpeed
  else
   Planet[1].Xpos:=Planet[1].Xpos+Planet[1].XSpeed;
   //Ende Des ZEICHNEN!!!!!!
  SwapBuffers(h_DC)
end;

end.

Probiert es mal aus :wink: und sagt mir bitte :oops: wie man das beheben kann.

Moderiert von user profile iconPeter Lustig: Code- durch Delphi-Tags ersetzt und verschoben


Zuletzt bearbeitet von Tilo am Do 15.01.04 19:38, insgesamt 1-mal bearbeitet
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Do 15.01.04 16:08 
Hallo!

Bitte ändere den Titel des Topics da er wenig über das eigentlich Thema verrät. Hier der entsprechende Absatz aus den Delphi-Forum.de Richtlinien:

Richtlinien hat folgendes geschrieben:

1.1 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 "Edit" klicken und den Titel ändern. Dank Dir!

Gruß Peter Lustig

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
Raphael O.
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1596


VS 2013
BeitragVerfasst: Do 15.01.04 17:36 
erstmal: im ontimer ereignis zu zeichnen ist seehr schlecht...
schau dir mal Application.onIdle an ;)
ich schau mir den Qulltext gleich mal an...
Tilo Threadstarter
ontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 1098
Erhaltene Danke: 13

Win7 geg. WInXP oder sogar Win98
Rad2007
BeitragVerfasst: Do 15.01.04 19:41 
@Peter Lustig: Geht der Titel jetzt?

@ Fiji-Fighter:
Ja, das weis Ich. Aber bei der OnIdle-Anweisung wird die Routine nur bei Unterbeschäftigung der CPU ausgeführt. Das möchte ich vermeinden.
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Do 15.01.04 19:56 
Hallo!

Wenn Du der Meinung bist, dass das Problem bei der Berechnung liegt, dann ist der Titel in Ordnung.

MfG
Peter

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
Raphael O.
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1596


VS 2013
BeitragVerfasst: Do 15.01.04 20:19 
Tilo hat folgendes geschrieben:
Ja, das weis Ich. Aber bei der OnIdle-Anweisung wird die Routine nur bei Unterbeschäftigung der CPU ausgeführt. Das möchte ich vermeinden.

es ist aber allemal besser, als wenn du es im onTimer-Ereignis machst...
das kann zu vielen Komplikationen führen...
die OnIdle-MEthode funktioniert wunderbar und wird auch von Spielen eingesetzt die wirklich gut sind ;)
Tilo Threadstarter
ontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 1098
Erhaltene Danke: 13

Win7 geg. WInXP oder sogar Win98
Rad2007
BeitragVerfasst: Do 15.01.04 20:51 
:roll: Ok Ich werds umstellen.
Aber das war ja nicht mein Problem :?!?:
Raphael O.
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1596


VS 2013
BeitragVerfasst: Do 15.01.04 21:00 
also bei mir funktioniert der Quelltext nicht, wenn ich ihn in ein Projekt ienfüge und einen Timer hineinsetze und die ontiemr-prozedur entsprechend verweise :?
ich könnte mir vorstellen, dass es etwas mit der NearClippingplane und der entfernung des MErkur zu tun hat :/
Tilo Threadstarter
ontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 1098
Erhaltene Danke: 13

Win7 geg. WInXP oder sogar Win98
Rad2007
BeitragVerfasst: Fr 16.01.04 22:25 
Also ich habe mal den Code komplett überarbeitet und gehe jetzt über Winkelsätze an die Sache an.
Beim erstren Verfahren liegt das gleiche Problem vor, wie wenn ein Sprinter von einem Pfeil verfolgt, man muss die Entfernungen über (hier lineare) Funktionen berechnen und nicht schrittweise. Vielleicht kennt einer die Geschichte die ich meine, ansonsten ist dieser Absatz Nonsens :oops:

Wenn Ihr mir erklärt, wei man eine Zip hoch ladet, werd Ich mal die Compilierte Exe samt Code "hergeben". Hier ist schon mal der Code:

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
141:
142:
143:
144:
145:
146:
147:
148:
149:
150:
151:
152:
153:
154:
155:
156:
157:
158:
159:
160:
161:
162:
163:
164:
165:
166:
167:
168:
169:
170:
171:
172:
173:
174:
175:
176:
177:
178:
179:
180:
181:
182:
183:
184:
185:
186:
187:
188:
189:
190:
191:
192:
193:
194:
195:
196:
197:
198:
199:
200:
201:
202:
203:
204:
205:
206:
207:
208:
209:
210:
211:
212:
213:
214:
215:
216:
217:
218:
219:
220:
221:
222:
223:
224:
225:
226:
227:
228:
229:
230:
231:
232:
233:
234:
235:
236:
237:
238:
239:
240:
241:
242:
243:
244:
245:
246:
247:
248:
249:
250:
251:
252:
253:
254:
255:
256:
257:
258:
259:
260:
261:
262:
263:
264:
265:
266:
267:
268:
269:
270:
271:
272:
273:
274:
275:
276:
unit Planeten_1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs,OpenGl12, ExtCtrls, StdCtrls;

type
  TPlanet = record
   Xpos,Zpos:extended;
   radius:integer;
   Xspeed,Zspeed:extended;
   Masse:extended;
   Name:string;
   red,green,blue:single;
   Tage:extended;
  end;
  TForm1 = class(TForm)
    mLeft: TButton;
    mRight: TButton;
    mZoomout: TButton;
    mZoomin: TButton;
    procedure FormCreate(Sender: TObject); 
    procedure InitGL;
    procedure DrawScene;
    procedure ApplicationEvents1Idle(Sender: TObject; var Done: Boolean);
    procedure SetDCPixelFormat(Handle: HDC);
    procedure mLeftClick(Sender: TObject);
    procedure mRightClick(Sender: TObject);
    procedure mZoomoutClick(Sender: TObject);
    procedure mZoominClick(Sender: TObject);

  private 
    { Private-Deklarationen } 
  public 
    { Public-Deklarationen } 
  end; 



var 
  Form1: TForm1; 
  h_DC: hDC;  
  hRC: HGLRC; 
  Sonne:TPlanet;
  Planet: array[1..9] of TPlanet;
  xpos,ypos,zpos:integer;
  c,d:integer;
  break:boolean;
implementation 

{$R *.dfm} 

procedure TForm1.FormCreate(Sender: TObject); 
begin
c:=0;
d:=10;
break:=false;
form1.Resizing(wsmaximized);
InitOpenGL;
h_DC:=GetDC(Handle);
SetDCPixelFormat(h_DC);
hRC:=wglCreateContext(h_DC);
wglMakeCurrent(h_DC,hRC);
InitGL;
xpos:=-1000; ypos:=0;zpos:=-5000;
//PlanetenDaten
Planet[1].Name:='Merkur';
Planet[1].Xpos:=579;
Planet[1].ZPos:=0;
Planet[1].Zspeed:=47.9;
Planet[1].XSpeed:=-47.9;
Planet[1].Masse:=0.34;
Planet[1].red:=1;
Planet[1].green:=0;
Planet[1].blue:=1;
Planet[1].radius:=22;
Planet[1].Tage:=88;
Planet[2].Name:='Venus';
Planet[2].Xpos:=1082;
Planet[2].ZPos:=0;
Planet[2].Zspeed:=35;
Planet[2].XSpeed:=0;
Planet[2].Masse:=4.87;
Planet[2].red:=1;
Planet[2].green:=0.5;
Planet[2].blue:=0;
Planet[2].radius:=54;
Planet[2].Tage:=225;
Planet[3].Name:='Erde';
Planet[3].Xpos:=1490;
Planet[3].ZPos:=0;
Planet[3].Zspeed:=29.8;
Planet[3].XSpeed:=0;
Planet[3].Masse:=5.97;
Planet[3].red:=0;
Planet[3].green:=0;
Planet[3].blue:=1;
Planet[3].radius:=57;
Planet[3].Tage:=365.26;
Planet[4].Name:='Mars';
Planet[4].Xpos:=2279;
Planet[4].ZPos:=0;
Planet[4].Zspeed:=24.1;
Planet[4].XSpeed:=0;
Planet[4].Masse:=0.64;
Planet[4].red:=1;
Planet[4].green:=0;
Planet[4].blue:=0;
Planet[4].radius:=30;
Planet[4].Tage:=697.24;
Planet[5].Name:='Jupiter';
Planet[5].Xpos:=7783;
Planet[5].ZPos:=0;
Planet[5].Zspeed:=13.1;
Planet[5].XSpeed:=0;
Planet[5].Masse:=1900;
Planet[5].red:=0;
Planet[5].green:=1;
Planet[5].blue:=1;
Planet[5].radius:=332;
Planet[5].Tage:=4331.64;
Planet[6].Name:='Saturn';
Planet[6].Xpos:=14270;
Planet[6].ZPos:=0;
Planet[6].Zspeed:=9.6;
Planet[6].XSpeed:=0;
Planet[6].Masse:=569;
Planet[6].red:=0.5;
Planet[6].green:=0.5;
Planet[6].blue:=0.5;
Planet[6].radius:=270;
Planet[6].Tage:=10757.8;
Planet[7].Name:='Uranus';
Planet[7].Xpos:=28696;
Planet[7].ZPos:=0;
Planet[7].Zspeed:=6.8;
Planet[7].XSpeed:=0;
Planet[7].Masse:=87;
Planet[7].red:=1;
Planet[7].green:=1;
Planet[7].blue:=0.5;
Planet[7].radius:=114;
Planet[7].Tage:=30684.16;
Planet[8].Name:='Neptun';
Planet[8].Xpos:=44967;
Planet[8].ZPos:=0;
Planet[8].Zspeed:=5.4;
Planet[8].XSpeed:=0;
Planet[8].Masse:=103;
Planet[8].red:=0.5;
Planet[8].green:=1;
Planet[8].blue:=0.5;
Planet[8].radius:=111;
Planet[8].Tage:=60191.36;
Planet[9].Name:='Pluto';
Planet[9].Xpos:=59000;
Planet[9].ZPos:=0;
Planet[9].Zspeed:=4.7;
Planet[9].XSpeed:=0;
Planet[9].Masse:=0.013;
Planet[9].red:=0;
Planet[9].green:=0.5;
Planet[9].blue:=0;
Planet[9].radius:=10;
Planet[9].Tage:=90469.28;
Application.OnIdle := ApplicationEvents1Idle;
end;

procedure TForm1.ApplicationEvents1Idle(Sender: TObject;
  var Done: Boolean);
begin
  DrawScene;
  Done:=False;
end;

procedure TForm1.DrawScene;
var
a,b:integer;
begin
  glClear(GL_COLOR_BUFFER_BIT OR GL_DEPTH_BUFFER_BIT);
  glLoadIdentity;
  gltranslate(xpos,ypos,zpos);
  glColor3f(1,1,0);
  glusphere(gluNewQuadric,350,100,100);
  for a:=1 to 9 do
  begin
   glpushMatrix;
   Planet[a].Xpos:=sin(360/Planet[a].Tage*c)*Planet[a].radius*100;
   Planet[a].Zpos:=cos(360/Planet[a].Tage*c)*Planet[a].radius*100;
   glColor3f(Planet[a].red,Planet[a].green,Planet[a].blue);
   gltranslate(Planet[a].Xpos,0,Planet[a].Zpos);
   glusphere(gluNewQuadric,Planet[a].radius,100,100);
   glPopMatrix;
  end;
  c:=c+1;
  SwapBuffers(h_DC);

end;

procedure TForm1.InitGL;
begin
  glClearColor(0,0,0,0);
  glClearDepth(1);
  glDepthFunc(GL_LESS);
  glShadeModel(GL_SMOOTH);
  glEnable(GL_DEPTH_TEST);

  glViewport(0,0,Width,Height);
  glMatrixMode(GL_PROJECTION);
  glLoadIdentity;
  gluPerspective(45,Width/Height,1,100000);
  glMatrixMode(GL_MODELVIEW);
end;

procedure TForm1.SetDCPixelFormat(Handle: HDC);
var
  nPixelFormat: GLUint;
const
  pfd: PIXELFORMATDESCRIPTOR = (
      nSize: sizeof( PIXELFORMATDESCRIPTOR );
      nVersion: 1;
      dwFlags: PFD_DRAW_TO_WINDOW
      or PFD_SUPPORT_OPENGL
      or PFD_DOUBLEBUFFER;
      iPixelType: PFD_TYPE_RGBA;
      cColorBits: 16;
      cRedBits: 0;
      cRedShift: 0;
      cGreenBits: 0;
      cBlueBits: 0;
      cBlueShift: 0;
      cAlphaBits: 0;
      cAlphaShift: 0;
      cAccumBits: 0;
      cAccumRedBits: 0;
      cAccumGreenBits: 0;
      cAccumBlueBits: 0;
      cAccumAlphaBits: 0;
      cDepthBits: 16;
      cStencilBits: 0;
      cAuxBuffers: 0;
      iLayerType: PFD_MAIN_PLANE;
      bReserved: 0;
      dwLayerMask: 0;
      dwVisibleMask: 0;
      dwDamageMask: 0
  );
begin
    nPixelFormat:=ChoosePixelFormat(h_DC, @pfd);
    SetPixelFormat(h_DC,nPixelFormat,@pfd);
  end;

procedure TForm1.mLeftClick(Sender: TObject);
begin
xpos:=xpos+100;
end;

procedure TForm1.mRightClick(Sender: TObject);
begin
xpos:=xpos-100;
end;


procedure TForm1.mZoomoutClick(Sender: TObject);
begin
zpos:=zpos-100;
end;

procedure TForm1.mZoominClick(Sender: TObject);
begin
zpos:=zpos+100;
end;

end.
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Fr 16.01.04 22:41 
Hallo!

Ist Dein Problem die Berechnung der Planetenbahnen oder die Darstellung? Wenn es die Berechung ist:

Um die Planetenbahnen korrekt auszurechnen, musst Du ein Differentialgleichungssystem lösen (Stichwort: Kepler-Problem). Dies kannst Du beispielsweise mit einem Runge-Kutta-Verfahren machen.

Bei der Darstellung kann ich Dir leider nicht helfen.

MfG
Peter

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
Tilo Threadstarter
ontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 1098
Erhaltene Danke: 13

Win7 geg. WInXP oder sogar Win98
Rad2007
BeitragVerfasst: Sa 17.01.04 15:28 
@ Peter Lustig: Also mit der darstellung habe Ich kein Problem.
Ich werde mal nachschlagen was Du meinst.
Raphael O.
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1596


VS 2013
BeitragVerfasst: Sa 17.01.04 18:42 
ich denke dass für Planeten in diesem Fall eine einfache Kraisbahn um ein Zentralgestirn völlig ausreicht...
komme allerdings frühestens heut NAcht dazu das zu testen, weil ich jetzt noch weg muss ;)
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Sa 17.01.04 18:49 
Hallo!

Das kommt drauf an, wie exakt das sein muss. Ich habe die Diff.gleichung mal in C++ numerisch gelöst. Da kommt schon was anderes als Kreisbahnen raus. (Habe es auch noch Delphi portiert, als Demo für 'ne Mathlib, aber die ist noch nicht reif für die Öffentlichkeit)

Was man aber machen könnte, wäre, die große und die kleine Halbachse nachzuschlagen (für jeden Planeten) und dann die Ellipsenbahn berechnen. Dann hat man zwar nur eine Näherung und weiß auch nicht, ob die Ausrichtung der einzelnen Ellipsen zu einander korrekt ist, aber es sieht zumindest schonmal besser aus.


MfG
Peter

edit: ach ja, und die Planeten bewegen sich ja nicht alle in der Ekliptik!

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
Raphael O.
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1596


VS 2013
BeitragVerfasst: Sa 17.01.04 23:50 
dann sollte der Topicersteller am besten mal sagen, ob ihm Kreisbahnen reichen :roll:
Tilo Threadstarter
ontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 1098
Erhaltene Danke: 13

Win7 geg. WInXP oder sogar Win98
Rad2007
BeitragVerfasst: So 18.01.04 10:09 
@Fiji-Fighter:
Ich würde gerne annähernd reelle Planetenbahnen haben, aber Kreisbahnen tun es auch. Im zweiten Code, den Ich gepostet habe habe ich auch perfecte Kreisbahnen für die Planeten gewählt und die Positionen per Cosinus und Sinus berechnet. :roll:
@ Peter Lustig:
Kannst Du mir bitte sagen, wo ich Informationen zum Kepler Problem und dem Runge-Kutta-Verfahren erhalte?
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: So 18.01.04 11:08 
Hallo!

Das Kepler-Problem kann ich Dir schnell selbst beschreiben: Du hast 9 Planeten plus die Sonne. Monde lassen wir mal weg.
Jeder dieser Körper hat zu einem beliebigen Zeitpunkt eine bestimmte Koordinate im Raum und eine bestimmte Geschwindigkeit. Nun wirkt die Schwerkraft jedes Körpers auf jeden anderen nach dem Newton'schen Gravitationsgesetz. Dieses enthält sowohl die zweite Ableitung des Ortes (die Beschleunigung) als auch den Ort selbst (in der Entfernung und so ...). Damit ist das eine Differentialgleichung. Soweit ich weiß ist diese analytisch aber nur noch bei zwei (oder waren es drei?) Körpern lösbar. Mit 10 auf gar keinen Fall mehr.

Eine solche Differentialgleichung löst man numerisch mit einem ODE-Solver. (ODE = Ordinary Differential Equation). Ein solcher ODE-Solver ist das Runge-Kutta-Verfahren. Es gibt aber noch andere, Runge-Kutta ist nur sehr beliebt. Implementationen davon sollten im Netz zu finden sein. Wahrscheinlich aber im Fortran, C oder C++.

Du solltest Dir die Frage stellen, was Du mit Deinem Programm genau erreichen möchtest! Brauchst Du wirklich die exakten Planetenpositionen, wie sie wirklich am Himmel sind oder brauchst Du einfach nur eine Veranschaulichung der Bahnen?

MfG
Peter

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
Tilo Threadstarter
ontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 1098
Erhaltene Danke: 13

Win7 geg. WInXP oder sogar Win98
Rad2007
BeitragVerfasst: Mo 19.01.04 16:20 
@ Peter Lustig:
Mir würde es schon genügen, wenn die Planetenbahnen kreisrund oder elliptisch wären. Es genügt, wenn die Planeten sich um die Sonne Bewegen und es Modellhaft nach unserem hiesigen Sonnensystem aussieht. Die Genauigkeit spielt dabei eine untergeordnete Rolle.
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Mo 19.01.04 18:30 
Hallo!

Dann kannst Du Dir das Ganze mit Kepler und Runge-Kutta sparen. Eine Kreis- oder Ellipsenbahn ist ja einfach zu berechnen.

MfG
Peter

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
Tilo Threadstarter
ontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 1098
Erhaltene Danke: 13

Win7 geg. WInXP oder sogar Win98
Rad2007
BeitragVerfasst: Di 20.01.04 13:54 
Ok,
Ich werde das Programm zu Ende programmieren und kreise als Bahnen verwenden.