How to move the solar system?

edited November 2017 in Library Questions

Hey guys, I´m Theresa, student of Visual Communication in Germany, so English is not my native language and I am new in processing but I will try my best, so here is my question. I try to simulate a moving solar system in processing with all physics components like gravitation, forces, velocity, acceleration, positions etc. the coordinates I got from the nasa website. I have two mainly problems. the first is the physic, I don't know, if the calculating methods are right and the second problem is that only one planet is visible but I defined two. Ah, and it must be ready till Monday :-P please, could anyone help me? Here is my code:

/////// SONNE zum 1.1. 2000
/////// X = -7.139143380212697E-03 Y = -2.792019770161695E-03 Z = 2.061838852554664E-04
/////// VX= 5.374260940168566E-06 VY=-7.410965396701423E-06 VZ=-2.522925180072137E-03

/////// MERKUR zum 1.1. 2000
/////// X =-1.478672233442572E-01 Y =-4.466929775364947E-01 Z =-2.313937582786785E-02
/////// VX= 2.117424563261189E-02 VY=-7.105386404267509E-03 VZ=-2.522925180072137E-03

/////// VENUS zum 1.1. 2000
/////// X =-7.257693602841776E-01 Y =-2.529582082587794E-02 Z = 4.137802526208009E-02
/////// VX= 5.189070188671265E-04 VY=-2.031355258779472E-02 VZ=-3.072687386494688E-04

/////// ERDE zum 1.1. 2000
/////// X =-1.756637922977122E-01   Y = 9.659912850526895E-01   Z = 2.020629118443605E-04
/////// VX=-1.722857156974862E-02   VY=-3.015071224668472E-03   VZ=-5.859931223618532E-08

/////// MARS zum 1.1. 2000
/////// X = 1.383221922520998E+00 Y =-2.380174081741852E-02 Z =-3.441183028447500E-02
/////// VX= 7.533013850513376E-04 VY= 1.517888771209419E-02 VZ= 2.996589710207392E-04

/////// https://rechneronline.de/planeten/masse.php

import peasy.*;
import peasy.org.apache.commons.math.*;
import peasy.org.apache.commons.math.geometry.*;

PVector pos;
PVector vel;
PVector acc;
float mas;
float deltaT;
float far;

Boid Erde = new Boid(
new PVector(-1.756637922977122E-01, 9.659912850526895E-01, 2.020629118443605E-04), 
new PVector(-1.722857156974862E-02, -3.015071224668472E-03, -5.859931223618532E-08), 
new PVector(0, 0, 0), 
0.000002988, 
0.999,
255); 

Boid Venus = new Boid(
new PVector(-7.257693602841776E-01, -2.529582082587794E-02, 4.137802526208009E-02), 
new PVector(5.189070188671265E-04, -2.031355258779472E-02, -3.072687386494688E-04), 
new PVector(0, 0, 0), 
0.000002448, 
0.999,
155);

PeasyCam cam;

void setup() {
  size(1600, 1200, P3D);
  background(150);
  frameRate(10);
  cam = new PeasyCam(this, 10000);
}


void draw() {
  lights();
  translate(width / 2, height / 2);
  scale(2000);
  Erde.bewegDich();
  Erde.zeichneDich();
  Venus.bewegDich();
  Venus.zeichneDich();
}

and than a second tab called "boid"

class Boid {
  Boid(PVector position, PVector velocity, PVector acceleration, float masse, float deltaZeit, float farbe) {
    pos = position;
    vel = velocity;
    acc = acceleration;
    mas = masse;
    deltaT = deltaZeit;
    far = farbe;
  }

  void bewegDich() {
    PVector posS = new PVector();
    float masS = 1;                                     // Sonne in Sonnenmassen
    float G_SI = 6.674E-11;                             // m^3 kg^-1 s^-2
    float sekundenTag;
    float kiloSonnenmassen;
    float meterAE;
    float Grav;

    float r = PVector.dist(posS, pos);                  //muss in AE umgerechnet werden
    sekundenTag = (24 * 60 * 60);
    kiloSonnenmassen = 1.98892E+30;
    meterAE = (1 / (1.49597E+11));
    Grav = (G_SI * (sekundenTag * sekundenTag) * kiloSonnenmassen * (meterAE * meterAE * meterAE));               // 0.017204072^2
    PVector Anziehungskraft = (PVector.sub(posS, pos)).mult(Grav * mas * masS * (1 / (r * r * r)));               // anziehungskraft der sonne

    acc = PVector.div(Anziehungskraft, mas);
    vel = PVector.add(vel, (acc.mult(deltaT)));
    pos = PVector.add(pos, vel);                                                                                  // DIE GESCHWINDIGKEIT WIRD AUF DIE POSITION AUFADDIERT
    acc = PVector.mult(acc, 0);
  }

  void zeichneDich() {
    background(0);
    println(pos);
    pushMatrix();                                       // ändert die koordinaten innerhalb von push/pop matrix
    translate(pos.x, pos.y, pos.z);
    fill(far);
    noStroke();
    sphere(0.1);
    popMatrix();
  }
}
Tagged:

Answers

  • ah, and at the end, I would like to show two planets and draw a line between them to get a harmony like this:

  • Answer ✓

    du kannst dein post editieren

    gehe dafür auf das Zahnrad und klicke edit

    lasse eine leere zeile vor und nach dem ganzen code

    markier den kompletten code und drück ctrl-o

  • tausend dank, sieht viel schicker aus - aber jetzt habe ich irgendwas dummes getan und die frage als beantwortet markiert -.- geht das rückgängig zu machen?

  • this

    PVector pos; PVector vel; PVector acc; float mas; float deltaT; float far;

    belongs probably into the class

    so it is individually for each planet and not global variables

  • could not run the sketch =/

  • kann man wohl nicht rückgängig machen

    für die linie: in draw einfach

    line(erde.pos.x, erde.pos.y, venus.pos.x, ........ );

  • scale 2000 ? probier mal lieber 2

    warum bei peasycam 10000 warum nicht 200?

  • bei fehlern am besten immer den kompletten aktuellen code posten

    wo kommst du her?

  • ok ich habe die variablen in die class verlegt, sehe aber trotzdem nur einen Planeten

  • hast du scale und peasycam korrigiert?

    vllt. ist der zweite Planet ausserhalb vom bildschirm?

  • edited November 2017

    ich hab scale auf 2000, weil ich sonst nichts sehen kann und aus ähnlichen gründen auch peasy cam auf 10000. mit fehlt da einfach das Verständnis für die Zusammenhänge und Maßstäbe... sind für mich einfach keine vorstellbaren Zahlen, mit denen ich da rechne. ich komm aus Thüringen

  • edited November 2017

    vllt. musst du mit der maus die kamera mal drehen um beide planeten zu finden

    ich komm aus Berlin

  • ah, du darfst in zeichnedich kein background haben

  • kann noch keine erfolge berichten.. kannst du zwei Planeten sehen, wenn du es bei dir startest?

  • sphere 0.1 ist sehr klein, ich nutze immer 17 oder so, aber du scalest ja mit 2000 hoch

    println würde ich später entfernen; ist zT instabil

  • edited November 2017

    ah, du darfst in zeichnedich kein background haben

    dein Mathe ist aber besser als meins - wofür machst du das, physik leistungskurs?

  • naja ich rechne in astronomischen Einheiten... deswegen liegen die zahlen so weit auseinander

  • ne, ist ein Projekt für die uni. ich brauchs als Grundlage für gestalterische Arbeiten

  • und geht es jetzt?

  • jaaaaa!!! zwei Planeten! irre

  • tausend dank!!! ohne Mist, ich verzweifle gerade den vierten fucking Tag an diesem Problem und melde mich in diesem Forum an und ne viertel Stunde später ist dieses eine unter vielen Problem gelöst.

  • cool

    mit der linie habe ich dir ja erklärt

    wie heisst dein fach an der uni?

  • ich muss aufhören, bis bald mal!

  • ja das mit der Linie kommt erst zum Schluss, wenn alle Planeten drin sind. dann noch mit controlP5 ein paar Knöpfe um sie an und auszuschalten und ich bräuchte noch irgendwie die Möglichkeit dem Programm zu sagen, dass es zeichnen soll wie es nach x Jahren aussieht. Das werden jetzt die nächsten Schritte sein. Ich studiere Visuelle Kommunikation - also völlig fern jeglicher Naturwissenschaften. Vielleicht tue ich mich deswegen so schwer damit^^

  • nein, deine Physik ist doch super!!

  • ach da sind noch ein Haufen Fehler drin. Vielleicht findet sich da ja noch jemand, der mir diesbezüglich helfen kann.. Meinst du, ich muss dafür besser nochmal ne extra Frage erstellen? Eine, die sich mehr auf die Formeln bezieht, damit mal jemand kontrolliert?

  • ja, ist besser, und besser auf Englisch

  • Yes, post complete updated code for people to test and post in English if possible, and the community can help you.

    Also notice that if you search the forum (or search the forum using Google) for words like "solar" that you will find related past examples.

  • By the way: consider to use an array for your planets

    Then you can for loop over them in draw

  • edited November 2017

    an array for your planets

    before setup():

    Boid[] boids = new Boid[8];
    

    and then use:

    boids[0] = new Boid(.......
    

    etc.

This discussion has been closed.