Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Software-Projekte der Mitglieder (https://www.delphipraxis.net/26-software-projekte-der-mitglieder/)
-   -   Gravitation Erde-Asteroid (https://www.delphipraxis.net/110845-gravitation-erde-asteroid.html)

vsilverlord 25. Mär 2008 19:39


Gravitation Erde-Asteroid
 
Liste der Anhänge anzeigen (Anzahl: 1)
Guten Tag. 8)
Ich bin noch nicht so erfahren im Programmieren, trotzdem habe ich mich mal an das Problem mit der Gravitation von Erde zu einem Asteroiden gemacht.
Das Programm funktioniert auch schon ganz gut, man kann viele verschiedenen Parameter einstellen und sogar per Mausklick die Erde bzw. Den Asteroiden verschieben.
Das einzige was mich stört, ist dass das die Umsetzung hässlich ist und ich keine Ahnung habe, wie ich das mit einer netten Graphic machen könnte. Der blöde Asteroid will auch nie um die Erde kreisen oder so. Anbei ist nur die exe und die 2 Bilder, wenn ihr auch noch den Quelltext wollt müsst ihrs sagen, der ist halt sehr umständlich. :cry:
Von der physikalischen Umsetzung habe ich es so gemacht, dass ich die Kraft einfach in eine senkrecht und in eine waagrecht Kraft aufgeteilt habe und danach die Geschwindigkeit
ausrechne und so das Ding verschiebe.
Ich hoffe ihr könnt mir helfen und Tipps geben. :bouncing4:

ps: wenn der asteroid auf die Erde trifft gibts en bug

Jelly 25. Mär 2008 22:12

Re: Gravitation Erde-Asteroid
 
Zum einen kann man dir hier ohne Quellcode rein gar nichts sagen, denn die Glaskugeln sind mittlerweilen Mangelware hier im Forum.

Zumindest fällt mir auf, dass dein Asteroid sich ziemlich seltsam verhält, und demnach überhaupt nicht irgendwelchen physikalischen Gesetzet gehorscht... Gib mal als v_Wagerecht=300 ein, v_senkrecht belasse auf 0.... Je nachdem, welche Vorwerte ich stehen hatte, springt der Asteroid auf die Erde und entegegensetz wieder ab wie ein Tennisball gegen die Wand.... :shock:

Als zeige uns etwas Code, denn so wird das nix.

inherited 25. Mär 2008 22:16

Re: Gravitation Erde-Asteroid
 
Wie berechnest du die Gravitationskräfte?

Du musst
1. Die Gravitationkräfte berechnen
2. Die Anteil auf die beiden Achsen x und y mithilfe von sin und cos berechnen.

rawsoul 25. Mär 2008 23:15

Re: Gravitation Erde-Asteroid
 
Liste der Anhänge anzeigen (Anzahl: 1)
So etwas habe ich vor kurzem erst selbst umsetzen wollen. Anbei die Echse, der Quelltext kommt, sobald ich ihn entrümpelt und kommentiert habe.

Gruß, raw.

Die Muhkuh 25. Mär 2008 23:21

Re: Gravitation Erde-Asteroid
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hihi, das ist lustig :)

rawsoul 25. Mär 2008 23:34

Re: Gravitation Erde-Asteroid
 
Danke ;-) Ich habe es mal über die Nacht laufen lassen. Einfach ein grauer Ring mit gleichmäßig verteilten schwarzen Punkten, anscheinend durch Rundungen verursacht.

Die Muhkuh 25. Mär 2008 23:40

Re: Gravitation Erde-Asteroid
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hihi, soweit war ich auch, dann hab ich ausversehen drauf geklickt, jetzt hab ich so "perfekt" geklickt, dass es nur noch die Bahnen abfährt und keine neuen mehr macht :mrgreen:

inherited 25. Mär 2008 23:48

Re: Gravitation Erde-Asteroid
 
Hab da auch noch was, ich starte gleich mal WIndows und lad es hier hoch.

rawsoul 25. Mär 2008 23:51

Re: Gravitation Erde-Asteroid
 
Liste der Anhänge anzeigen (Anzahl: 1)
So, hier ham' wirs. Sauber ist es nicht, kommentiert auch nicht, allerdings habe ich kurz ein wenig Ordnung reingebracht. Vielleicht hilft es dir.

//Edit: Oh ja, inherited, mit Quelltext bitte, wenn's geht :D Dann kann ich mir mit Sicherheit ein paar Kniffe abgucken ;)

Namenloser 25. Mär 2008 23:55

Re: Gravitation Erde-Asteroid
 
Liste der Anhänge anzeigen (Anzahl: 2)
@Muhkuh: Nee, das ist schön :love:

Sowas könnte man eigentlich schön zum Screensaver aufpolieren.

dajuhsa 26. Mär 2008 00:06

Re: Gravitation Erde-Asteroid
 
ähem, ähem :warn:
es geht doch hier nicht um rawsouls projekt, auch wenn's schön ist :thumb: , sondern um vsilverlords problem :stupid:

anscheinend ist dein asteroid ein "google-bild", liege ich da richtig?
wenn ja, dann solltest du mal mit paint ganz aussenrum raddieren damit du das image transparent machen kannst.
dann würde das ganze schon besser aussehen.
auch ein blauer bis schwarzer hintergrund wäre nett :)
außerdem solltest du pausieren bei einem aufschlag, damit wäre der echt seltsame bug nicht mehr schlimm.
dann fände ich es auch noch interessant, wenn die Erde sich auch bewegen könnte :mrgreen: dann könnte man mal die
erde-5-meter-näher-an-der-sonne-Theorie testen :wink:
zu deiner Anziehungs-Prozedur kann ich auch nix sagen :stupid:

mfG dajuhsa
:wink:

inherited 26. Mär 2008 00:14

Re: Gravitation Erde-Asteroid
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hier ist eine etwas ältere Demo von mir, spannend für dich ist wohl vor allem die uPhysics.pas
Leider hatte ich noch keine Gelegenheit das ordentlich durchzukommentieren, wenn etwas unklar ist, frag bitte einfach.


(Sorry für das Flackern, ist mit Canvas realisiert der Einfachheit halber, die Kollision von Objekten ist auch suboptimal, aber das ist nicht Thema der Demo.)

@dajuhsa: Ab ins Bett, Jungchen :mrgreen:

Die Muhkuh 26. Mär 2008 00:57

Re: Gravitation Erde-Asteroid
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hi,

ich hab mal schnell ein OffscreenBitmap dazu gemacht, das flackern war ja nicht zum Aushalten.


Zitat:

Zitat von inherited
@dajuhsa: Ab ins Bett, Jungchen :mrgreen:

:mrgreen:

rawsoul 26. Mär 2008 01:03

Re: Gravitation Erde-Asteroid
 
Danke für den Source!

By the way: Nur, weil er etwas jünger ist, als Ihr, heißt das, dass er kein Nerd sein darf? :P

vsilverlord 26. Mär 2008 12:16

Re: Gravitation Erde-Asteroid
 
@ Jelly: das kann passieren wenn man nicht Stop und reset gedrückt hat.
Warum das so ist weiß ich leider nicht, aber bei mir macht der Asteroid
eigentlich immer das was er soll.
@ Inherited: Wie soll das denn sonst funktionieren ohne cos und sin? :wiejetzt:
Ich habs mit F:=G*m1*m2/r² und den Weg mit V:=v+f/m2 gerechnet. (m1 kürzt sich weg. :warn: )
@rawsoul: ist das mit Canvas gemacht? sieht echt gut aus.
@dajuhsa: Wenn das Programm an sich in Ordnung ist, kann ich den Code vom Aseroiden variabel gestalten, dann wäre es kein Problem andere Planten/Satelitten/Asteroiden einzufügen, und deren Masse / Geschwindigkeit einzustellen. Allerdings sollte da schon vorher das Programm an sich stimmen, weil das wäre schon ein bisschen Arbeit.
Der Code an sich ist ziemlich simpel, man könnte ihn auch theoretisch problemlos für 3 Dimensionen umprogrammieren, bloß das graphisch darzustellen ist bestimmt brutal schwer.
Vorher sollten die bescheurten Ruckler mal weg sein, die der Asteroid manchmal von sich gibt. :pale:
weiß sonst noch jemand was :spin:

vsilverlord 26. Mär 2008 13:02

Re: Gravitation Erde-Asteroid
 
@rawsoul: Ich hab mir jetzt mal deinen Quelltext untersucht und versucht ihn zu verstehen^^
so wie es aussieht ist das das Herzstück deiner physikalischen Berechnung:
Delphi-Quellcode:
 r := Sqrt(Sqr(P1.posX - P2.posX) + Sqr(P1.posY - P2.posY));
  if 2 * r < P1.size + P2.size then MouseDown(mbLeft, [], Random(ClientWidth), Random(ClientHeight));

  vec := (P1.size * P2.size / r / r) / 50;
  P2.speedX := P2.speedX + (- vec * (P2.posX - P1.posX));
  P2.speedY := P2.speedY + (- vec * (P2.posY - P1.posY));

  P2.posX := P2.posX + P2.speedX;
  P2.posY := P2.posY + P2.speedY;

  SetLength(Pfad, High(Pfad) + 2);
  Pfad[High(Pfad)] := Point(Round(P2.posX), Round(P2.posY));

  if (P2.posX < 0) or (P2.posX > ClientWidth) or (P2.posY < 0) or (P2.posY > ClientHeight)
    then MouseDown(mbLeft, [], Random(ClientWidth), Random(ClientHeight));

  Repaint;
also r ist der radius, die formel m1*m2/r² * k versteh ich auch noch. Aber dann gehts direkt zur Geschwindigkeit, den Schritt versteh ich nicht ganz. :gruebel:
Bei mir ist nämlich noch ein zwischenschritt mit Winkeln drin, der bei dir nicht ist (deins funktioniert trotzdem besser :shock:)
so sieht mein Herzstück aus:

Delphi-Quellcode:
Insgesamtkraft:=(Gravitationskonstante*Masserde*masseasteroid)/(entfernung*entfernung);
alpha:=radtodeg(arctan((-Erde.x+Asteroid.x)/(-erde.y+asteroid.y)));
//ausrechnen der Kräfte
Senkrechtkraft:=(sin(degtorad(alpha))*Insgesamtkraft);
Waagrechtkraft:=(cos(degtorad(alpha))*Insgesamtkraft);
//Ausrechnen der Geschwindigkeiten und Verschieben des Bildes
//Senkrecht
Senkrechtgeschwindigkeit:=Senkrechtgeschwindigkeit+Senkrechtkraft/Masseasteroid;
Asteroidenbild.Left:=Asteroidenbild.Left-round(Senkrechtgeschwindigkeit/100);
//Waagrecht
Waagrechtgeschwindigkeit:=Waagrechtgeschwindigkeit+Waagrechtkraft/masseasteroid;
Asteroidenbild.Top:=Asteroidenbild.Top+round(Waagrechtgeschwindigkeit/100);
ich hoffe ihr könnt mir helfen

rawsoul 26. Mär 2008 14:44

Re: Gravitation Erde-Asteroid
 
Ein Winkel ist ja nicht mehr, als das Verhältnis von (in diesem Fall) 2 Vektoren, speedX und speedY. In der Physik sind soweit ich weiß immer alle Vektoren unabhängig voneinander behandelbar - daher benötige ich auch keine Winkel, da ich speedX und speedY getrennt berechne.

Aber zur Info: Ich habe in dem Quelltext keinerleit physikalische Formeln angewandt, ich habe die Berechnungen darauf augebaut, dass ich weiß, dass sich 2 Massen gegenseitig im Verhältnis ihrer Masse und abhängig von deren Radius anziehen. Die Berechnung ist also selbst hergeleitet - und wahrscheinlich ziemlich Fehlervoll ;-)

Fussball-Robby 26. Mär 2008 14:50

Re: Gravitation Erde-Asteroid
 
Zitat:

Zitat von rawsoul
Aber zur Info: Ich habe in dem Quelltext keinerleit physikalische Formeln angewandt, ich habe die Berechnungen darauf augebaut, dass ich weiß, dass sich 2 Massen gegenseitig im Verhältnis ihrer Masse und abhängig von deren Radius anziehen. Die Berechnung ist also selbst hergeleitet - und wahrscheinlich ziemlich Fehlervoll ;-)

Ach - deswegen prallt der Asteroid fast nie auf die Erde und malt so tolle Muster :mrgreen:

rawsoul 26. Mär 2008 15:00

Re: Gravitation Erde-Asteroid
 
Ja, wahrscheinlich ;) Nein quatsch - der Asteroid prallt schon ab und an auf die Erde - ist dies aber der Fall, wird er zurückgesetzt und ein neuer gemalt :)

Ich habe mal bei Wikipedia nachgeschaut, soweit stimmt aber alles, zumindest von der Logik her. Ich habe nur ein, zwei, vielleicht 3 Konstanten zu viel drin :P Diese werden aber nur zur adjustierung der Geschwindigkeit genutzt, damit das ganze nicht zu schnell / zu langsam von statten läuft.

vsilverlord: mir ist gerade aufgefallen, dass dein Asteroid immer direkt in Richtung Erde fliegt. Hat er überhaupt eine Anfangsgeschwindigkeit? Diese müsstest du natürlich haben!

vsilverlord 26. Mär 2008 15:07

Re: Gravitation Erde-Asteroid
 
die Anfangsgeschwindigkeit kann man einstellen, genauso wie die Massen! oben links!

olee 26. Mär 2008 15:56

Re: Gravitation Erde-Asteroid
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hi ich hab auch mal so was entwickelt und das in ein Spiel verpackt.

Ist auch ähnlich (nur das es grafisch besser ist und Spaß macht ^^)


EDIT: Ich habe das auch vollkommen ohne sin u.a. realisiert und es funktioniert PRIMA

MFG

Björn

inherited 26. Mär 2008 16:13

Re: Gravitation Erde-Asteroid
 
Zitat:

Zitat von vsilverlord
@ Inherited: Wie soll das denn sonst funktionieren ohne cos und sin? :wiejetzt:
Ich habs mit F:=G*m1*m2/r² und den Weg mit V:=v+f/m2 gerechnet. (m1 kürzt sich weg. :warn: )

Wieso ohne? Du brauchst zumindest die Verhältnisse. Sieh dir einfach mal den Quelltext an.

@olee: Das geht völlig am Thema vorbei. Das hier ist kein Seht-mich-an-ich-kann-das-auch-Thread, sondern hier geht es um die Berechnung. Und solange du nicht den Quelltext mitlieferst gehört dein Beitrag mit Sicherheit in erstere Kategorie.

vsilverlord 26. Mär 2008 16:36

Re: Gravitation Erde-Asteroid
 
@ inheroted: So wie ich das sehe, sind das keine Verhältnisse bei dieser Situation. Mit Verhältnissen funktioniert es zwar, aber es ist nicht physikalisch korreckt.
Probier doch zb. mal die Hangabtriebskraft ohne Trigonometrie auszurechnen, oder die Kraft bei Flaschenzügen. Das ist nunmal immer ein Dreieck, und bei Dreiecken können die anderen Seiten ja auch nicht durch Verhältnisse ausgerechnet werden, sondern eben durch sinus und cosinus. 8)
ich hoffe das stimmt jetzt so, aber eigentlich wollte ich ja wissen wie ich mein Programm verbessern kann. :gruebel:

olee 26. Mär 2008 16:42

Re: Gravitation Erde-Asteroid
 
Oh stimmt das hatte ich ganz vergessen...

{an die Stirn schlag}

Die bei jedem Rendern aufgerufene Move-Methode des sich bewegenden Objkektes:

Delphi-Quellcode:
  for i := 0 to high(Planets) do
  begin
    XD := XD + Grav(Planets[i].X-X, Planets[i].X-X, Planets[i].Y-Y, Planets[i].GravF);
    YD := YD + Grav(Planets[i].Y-Y, Planets[i].X-X, Planets[i].Y-Y, Planets[i].GravF);
  end;
  X := X + XD;
  Y := Y + YD;

Die Grav-Methode:

Delphi-Quellcode:
function Grav(CalcDist,DistX,DistY,GravF: Double): Double;
begin
  Result := (CalcDist) / ((sqr(DistX)+sqr(DistY))/GravF);
end;

Diese Formel (natürlich ein wenig an Delphi angepasst^^) habe ich auch aus einem Physikbuch entnommen und stimmt.

inherited 26. Mär 2008 17:03

Re: Gravitation Erde-Asteroid
 
@olee: und was ist GravF? Wie überträgst du die Kraft auf die einzelnen Koordinaten (x,y)?
@vsilverload: Das ist mir klar, schau dir meinen Sourcecode an und du wirst sehen dass ich es anders mache.


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:18 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz