Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Mi Jul 09, 2025 18:07

Foren-Übersicht » Programmierung » Allgemein
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 
Autor Nachricht
BeitragVerfasst: Fr Okt 06, 2006 21:25 
Offline
DGL Member

Registriert: So Aug 20, 2006 23:19
Beiträge: 564
Tja Überschrift ist vllt etwas verwirrden, aber folgende Grafik sollte Abhilfe schaffen:
Bild

Gegeben sind:
OG, OP, D und G.
Mein Particle bewegt sich von P aus in Richtung Vektor D. Dabei wirkt aber auch eine konstante Kraft, die sich aus Masse und einer Beschleunigung berechnet. Jeder einzelne GravityPoint wird durch einen Vektor (den Ortsvektor des Punktes) und die Stärke der Anziehung dargestellt. Nun ist die Berechnung ja an sich nicht soo schwer. Allerdings möchte ich ja innerhalb einer Forschleife alle GravityPoints zusammenfassen.
Dabei muss immer die Kraft und der Abstand zwischen Particle und gravityPoint mit eingerechnet werden. An den Formeln dafür hapert es nicht, das sind ja eher basics.

Am ende will ich halt jedes Particle mit allen GravityPoints verbinden. Je weiter weg, desto schwächer ist die Kraft, die Wirkt. Ka wie ich das genau machen soll ^^
bin grad irgendwie in den Formeln verloren, am besten mach ich mir nen tee ^^


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Okt 06, 2006 23:17 
Offline
DGL Member
Benutzeravatar

Registriert: Di Jun 24, 2003 19:09
Beiträge: 732
Versuch bitte entweder Deutsch oder Englisch zu schreiben ;)
zu vermischt das etwas derbst :)
Und worin besteht jetzt genau dein Problem? Also wo kommst du nicht weiter?

Grundsätzlich gilt Superposition der Kräfte, jeder Gravitationspunkt übt eine Kraft auf den Partikel aus welche natürlich von der Entfernung des Partikels von dem Graviationspunkt abhängig ist. (F -> f(r))
Du rechnest einfach die Kräfte aller einzelnen Graviationspunkte aus und die Gesammtkraft welche auf deinen Partikel wirkt ist gleich der Summe der einzelnen Kräfte.

Die Kraft eines jeden Gravitationspunktes sollte klar sein: (alles was unterstrichen ist sollen mal vektoren sein - geht im Forum etwas blöd )
F = - G * m * M * (1/r²) * (r / r)

r... ist dabei der Betrag des Abstandes des Partikels zum einzelnen Graviationspunkt.
r... ist der Vektor vom Graviationspunkt zum Partikel
m... ist die Masse des Partikels
M... die Masse des Objects von welchem die Graviations ausgeht
G... ist die Graviationskonstante

Ich denke am besten ließe sich G * M in irgendeine dem System angepaßte Konstante zusammenfassen (würde da eher nicht mit den realen Werten rechnen da du ja auch noch die Stärke der anziehung beeinflussen willst). Klein 'm' kürzt sich am Ende eh raus.
Worauf es ankommt ist (1/r²) * (r / r) wobei (r / r) der Einheitsvektor in r richtung ist.

Du rechnest also genau diese Kraft für jeden Graviationspunkt mit jeweils angepaßtem Vektor r (Graviationspunkt -> Partikel) aus.
Wenn du die dann addierst und mit F = m * a gleichsetzt (hier kürzt sich klein m raus) hast du mit a die resultierende beschleunigung auf deinen Partikel :)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Okt 07, 2006 08:31 
Offline
DGL Member

Registriert: So Aug 20, 2006 23:19
Beiträge: 564
Jo ich seh mir das gleich an. Ich schreibe nicht alles in englisch, weil das hier nunmal der deutsche teil des forums ist. ich nutze nur begriffe wie acceleration usw weil die bei mir eben so heissen und ich davon ausgehe, dass jeder hier weiss, dass acceleration Beschleunigung ist.

ich setz mich da nachher nochma mit nem stift ran und seh mir mal deine formel an, bekomme das schon irgendwie hin


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Okt 07, 2006 11:33 
Offline
DGL Member
Benutzeravatar

Registriert: Di Jun 24, 2003 19:09
Beiträge: 732
Ich hab mir das gestern nochmal etwas genauer durch den Kopf gehen lassen,
bin mir da noch nicht so ganz sicher wie man es am besten realisieren kann.
Das Problem ist zwar nicht die wirkende Kraft und damit die beschleunigung auszurechnen - nein das Problem ist Wirkung dieser beschleunigung auf die Bahn des Partikels zu berechnen.

Man kann praktisch zwei Dinge machen,
a) die komplette Bahnkurve berechnen und dann einfach x(t),y(t),z(t) passend einsetzen. Das klingt zwar ganz toll, aber die Berechnung der Bahnkurve ist schon für einen Gravitationspunkt ziemlich kompliziert. Für mehrere wirds dann richtig krank bzw. nicht mehr machbar.

b) das ganze Annähern und jeweils nur für die Zeitspanne zwischen 2 Berechnungen die Einfluß ausrechnen. Also direkt mit dt rechnen und die Gleichungen nicht integrieren bzw. lösen.
Nachteil davon ist das zum einen die Genauigkeit sehr stark von der größe von dt abhängt (also der Zeit zwischen zwei aufrufen der Berechnung). Läuft deine Anwendung mit hohen fps wird es sehr genau, geht die fps rate stark nach unten wird das ganze relativ ungenau.
Zweiter Nachteil ist das du ein Problem bekommst wenn die Partikel dem Zentrum das Graviationspunktes zu nah kommen, dann gibts schwupsi mal ne nahezu unendlich große beschleunigung und weg is dein Partikel. Also müßtest du entweder beschleunigung nahe des Gravitationszentrums limitieren oder den Radius limitieren wie nah die Partikel an den Gravitationspunkt ran können.

Ich überlege gerade noch ob man es noch anders machen könnte,
aber so richtig fällt mir gerade nix ein.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Okt 07, 2006 13:42 
Offline
DGL Member

Registriert: So Aug 20, 2006 23:19
Beiträge: 564
Also ich habe mir ein Physikbuch meiner Mutter besorgt und fand die "Mechanik eines Systems von Masspunkten"
Darunter gibt es die Zusammensetzung von Kräften per Vektorpolygone

D.h:
Auf ein Particle P wirken 5 Kräfte (F1, F2, usw.)
Dann ist die Resultierende Kraft F:=0P+F1+F2+...

Dadruch entsteht dann ein Vektorpolygon.

So in etwa habe ich das realisiert:
Code:
  1.  
  2.           Gravity[0]:=0;
  3.           Gravity[1]:=0;
  4.           Gravity[2]:=0;
  5.  
  6.           if Length(EmissionGravityPosition)>0 then
  7.           begin
  8.             GravityAcceleration := EmissionGravityStrength[0]/Mass;
  9.             Gravity[0]:= Gravity[0] + (EmissionGravityPosition[0][0]-Direction[0])*GravityAcceleration;
  10.             Gravity[1]:= Gravity[1] + (EmissionGravityPosition[0][1]-Direction[1])*GravityAcceleration;
  11.             Gravity[2]:= Gravity[2] + (EmissionGravityPosition[0][2]-Direction[2])*GravityAcceleration;
  12.  
  13.             if Length(EmissionGravityPosition)>1 then
  14.             begin
  15.               for k:=1 to Length(EmissionGravityPosition)-1 do
  16.               begin
  17.                 GravityAcceleration := EmissionGravityStrength[k]/Mass;
  18.                 Gravity[0]:= Gravity[0] + (EmissionGravityPosition[k][0]-EmissionGravityPosition[k-1][0])*GravityAcceleration;
  19.                 Gravity[1]:= Gravity[1] + (EmissionGravityPosition[k][1]-EmissionGravityPosition[k-1][1])*GravityAcceleration;
  20.                 Gravity[2]:= Gravity[2] + (EmissionGravityPosition[k][2]-EmissionGravityPosition[k-1][2])*GravityAcceleration;
  21.               end;
  22.             end;
  23.           end;


Ka ob das so sinn macht, zerbreche mir da grad den kopf ^^


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 
Foren-Übersicht » Programmierung » Allgemein


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 3 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.007s | 14 Queries | GZIP : On ]