Delphi-PRAXiS
Seite 2 von 3     12 3      

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)

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!


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:51 Uhr.
Seite 2 von 3     12 3      

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