AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte Gravitation Erde-Asteroid
Thema durchsuchen
Ansicht
Themen-Optionen

Gravitation Erde-Asteroid

Ein Thema von vsilverlord · begonnen am 25. Mär 2008 · letzter Beitrag vom 26. Mär 2008
Antwort Antwort
Seite 2 von 3     12 3      
Benutzerbild von vsilverlord
vsilverlord
Registriert seit: 7. Jan 2008
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.
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.

ps: wenn der asteroid auf die Erde trifft gibts en bug
Angehängte Dateien
Dateityp: rar gravitation_135.rar (271,1 KB, 77x aufgerufen)
 
Benutzerbild von dajuhsa
dajuhsa

 
Turbo Delphi für Win32
 
#11
  Alt 26. Mär 2008, 00:06
ähem, ähem
es geht doch hier nicht um rawsouls projekt, auch wenn's schön ist , sondern um vsilverlords problem

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 dann könnte man mal die
erde-5-meter-näher-an-der-sonne-Theorie testen
zu deiner Anziehungs-Prozedur kann ich auch nix sagen

mfG dajuhsa
  Mit Zitat antworten Zitat
Benutzerbild von inherited
inherited

 
Turbo Delphi für Win32
 
#12
  Alt 26. Mär 2008, 00:14
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
Angehängte Dateien
Dateityp: rar physicstest_117.rar (180,6 KB, 20x aufgerufen)
Nikolai Wyderka
  Mit Zitat antworten Zitat
Benutzerbild von Die Muhkuh
Die Muhkuh

 
Delphi 2009 Professional
 
#13
  Alt 26. Mär 2008, 00:57
Hi,

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


Zitat von inherited:
@dajuhsa: Ab ins Bett, Jungchen
Angehängte Dateien
Dateityp: zip physictest_repacked_160.zip (224,4 KB, 29x aufgerufen)
Manuel
  Mit Zitat antworten Zitat
Benutzerbild von rawsoul
rawsoul

 
Delphi 2005 Personal
 
#14
  Alt 26. Mär 2008, 01:03
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?
Frank Dumont
  Mit Zitat antworten Zitat
Benutzerbild von vsilverlord
vsilverlord

 
RAD-Studio 2009 Arc
 
#15
  Alt 26. Mär 2008, 12:16
@ 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?
Ich habs mit F:=G*m1*m2/r² und den Weg mit V:=v+f/m2 gerechnet. (m1 kürzt sich weg. )
@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.
weiß sonst noch jemand was
Volker
  Mit Zitat antworten Zitat
Benutzerbild von vsilverlord
vsilverlord

 
RAD-Studio 2009 Arc
 
#16
  Alt 26. Mär 2008, 13:02
@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.
Bei mir ist nämlich noch ein zwischenschritt mit Winkeln drin, der bei dir nicht ist (deins funktioniert trotzdem besser )
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
Volker
  Mit Zitat antworten Zitat
Benutzerbild von rawsoul
rawsoul

 
Delphi 2005 Personal
 
#17
  Alt 26. Mär 2008, 14:44
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
Frank Dumont
  Mit Zitat antworten Zitat
Benutzerbild von Fussball-Robby
Fussball-Robby

 
Delphi 7 Enterprise
 
#18
  Alt 26. Mär 2008, 14:50
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
Robert L.
  Mit Zitat antworten Zitat
Benutzerbild von rawsoul
rawsoul

 
Delphi 2005 Personal
 
#19
  Alt 26. Mär 2008, 15:00
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 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!
Frank Dumont
  Mit Zitat antworten Zitat
Benutzerbild von vsilverlord
vsilverlord

 
RAD-Studio 2009 Arc
 
#20
  Alt 26. Mär 2008, 15:07
die Anfangsgeschwindigkeit kann man einstellen, genauso wie die Massen! oben links!
Volker
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:10 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