Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - problem mit planetensystem: koordinaten
MoD17 - Mi 20.10.04 22:19
Titel: problem mit planetensystem: koordinaten
hi
wir haben in informatik die aufgabe bekommen, ein kleines planetensystem (2d) mit canvas zu zeichnen, zuerst mal eine sonne und einen planeten
soweit so gut, ist noch kein problem
doch der planet soll sich auch bewegen, das heisst in form-farbe übermalen und dann irgendwo daneben neu zeichnen, wär auch kein problem, wenn er dabei keine kreisbahn beschreiben sollte
frage: wie bekomme ich die koordinaten raus, mit denen der planet neu gezeichnet werden soll? hab mal nen freund gefragt, der meinte :
Zitat: |
merkur.y = sonne.y - wurzel aus [merkur.abstand²-(sonne.x-merkur.x)²]
musst halt vorher etwas schreiben, wie: inc(merkur.x,v) |
das hab ich dann mit nem timer so umgesetzt:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| procedure TForm1.Timer1Timer(Sender: TObject);
begin planet.hide; inc(planet.x,planet.v); planet.y:=round(sonne.y-(SQRT((planet.abstand*planet.abstand)-(sonne.x-planet.x)*(sonne.x-planet.x)))); planet.show;
end; |
die ausgangsposition des planeten ist (sonne.x | sonne.y-planet.abstand), also senkrecht über der sonne, da der punkt (sonne.x | sonne.y) der mittelpunkt der sonne ist
das dumme ist nur, dass das nur für etwas mehr als ein viertel der bahn funktioniert(dreht sich im uhrzeigersinn um die sonne) und der planet dabei noch schneller wird
gruss & schonmal danke
MoD17
Tilo - Do 21.10.04 00:32
Nach einer ViertelRunde kehren sich die Vorzeichen!
Delphi-Quelltext
1: 2: 3: 4:
| ystep:=SQRT ((planet.abstand*planet.abstand)-(sonne.x-planet.x)*(sonne.x-planet.x)); if merkur.y>0 then merkur.y:=merkur.y-ystep else merkur.y:=merkur.y+step; xstep:=SQRT ((planet.abstand*planet.abstand)-(sonne.y-planet.y)*(sonne.y-planet.y)); if merkur.x>0 then merkur.x:=merkur.x-xstep else merkur.x:=merkur.x+xstep; |
Moderiert von
Christian S.: Code- durch Delphi-Tags ersetzt.
MoD17 - Do 21.10.04 15:12
hmm
irgendwie klappt das nicht....hab probiert und gerätselt, aber es will immer noch nicht.
stattdessen bekomme ich folgende fehlermeldung: "im projekt projekt1.exe ist eine exception der klasse einvalidop aufgetretet. meldung: #ungültige gleitkommaoperation'`. [...]"
und zwar sofort nachdem ich nen button zum start des umlaufs drücke
vielleicht liegt der fehler auch bei mir, aber ich finde ihn nicht...
habs folgendermassen umgesetzt ("merkur" ist bei mir einfach nur "planet"):
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| procedure TForm1.Timer1Timer(Sender: TObject);
begin planet.hide; planet.ystep:=round(SQRT (abs((40000)-(sonne.x-planet.x)*(sonne.x-planet.x)))); if planet.y>0 then planet.y:=planet.y-planet.ystep else planet.y:=sonne.y+planet.ystep; planet.xstep:=round(SQRT (abs((40000)-(sonne.y-planet.y)*(sonne.y-planet.y)))); if planet.x>0 then planet.x:=planet.x-planet.xstep else planet.x:=sonne.x+planet.xstep; planet.show; end; |
falls noch jemand wissen will, woher die variablen kommen:
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:
| type TForm1 = class(TForm) Button1: TButton; Timer1: TTimer; procedure FormCreate(Sender: TObject); procedure Button1Click(Sender: TObject); procedure Timer1Timer(Sender: TObject); private public end; TKreis = class x,y,r: word; Farbe: longint;
procedure show; procedure hide; end;
TPlanet = class x,y,r,v,abstand: word; farbe: longint; phi: word; xstep, ystep: word;
procedure show; procedure hide;
end; |
gruss
MoD17
kachel81 - Do 21.10.04 16:01
Da Du nirgendwo dividierst, wird das Problem vielleicht beim SQRT() auftreten, weil man aus einer nagativen Zahl keine Wurzel ziehen kann. Mußt noch den Absolutwert Abs() bilden.
MoD17 - Do 21.10.04 16:56
stimmt, kann man nicht
hab ich geändert (auch oben im code )
aber jetzt verschwindet der planet und wird nicht neu gezeichnet
am timer liegts nicht, hab dieselbe prozedur mal ohne timer mit nem button aufgerufen, gleiches ergebnis
ich komme einfach nicht weiter...zum glück hab ich ferien und deshalb noch zeit, aber ich hätte es schon gerne fertig...
gruss
MoD17
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!