sonnensystem



  • die monde drehen sich ja das ist ja nicht das problem. nur iwie vercheck ichs wie ich das machen soll, das sich die monde MIT den dazugehörigen planeten mit um die sonne drehen. meine monde drehen sich nur an einer stelle.

    hab ma nen screen gemacht, damit ihr hoffentlich versteht was ich meine, weil ich das nicht erklären kann.

    http://s1.directupload.net/images/120109/rgquqiw8.jpg

    und nein wird nich maßstabs getreu 😃


  • Mod

    Und inwiefern helfen dir die beiden Antworten nicht?



  • ich checks iwie nich wie ich die neue position der planeten bzw. der erde berechne 😞 bin ziemlich neu in c++ 😮



  • Ich habe keine Lust, das aus deinem Code herauszufinden, aber: Berechnest du die aktuelle Position aus einer Formel oder rechnest du alle 0,0x Sekunden etwas zur aktuellen Position der Objekte hinzu? Falls du ersteres machst, dann gilt: MondPosition(t) = Vektor(r * sin(a*t); r * cos(a*t)) + PlanetenPosition(t)



  • also, falls ich das jez richtig verstanden habe. ich verschiebe die planten in den ursprung lasse sie rotieren und verschieb die wieder zurück.

    das mach ich mit 2 matrizen

    Mat4f translate(float x, float y, float z)
    {
        return Mat4f(1, 0, 0, x,
                     0, 1, 0, y,
                     0, 0, 1, z,
                     0, 0, 0, 1);
    }
    
    Mat4f rotate(float winkel)
    {
        return Mat4f(cos(winkel / 180 * M_PI), -sin(winkel / 180 * M_PI),0, 0,
                     sin(winkel / 180 * M_PI), cos(winkel / 180 * M_PI), 0, 0,
                     0, 0, 1, 0,
                     0, 0, 0, 1);
    }
    

    und das sieht dann so aus wenn ich das mache:

    Mat4f move_erde = translate(320, 240, 0) * rotate(360 / 365.256) * translate(-320, -240, 0);
    


  • Warum nimmst du eine Matrix, wenn du doch einen Vektor nehmen könntest? Wofür stehen die Werte in der Matrix? Und warum nimmst du 365.256, wenn es doch eigentlich 365.2425 Tage sind?



  • weil wirs so machen sollen. ist vorgegeben 😕



  • wxSkip schrieb:

    Und warum nimmst du 365.256, wenn es doch eigentlich 365.2425 Tage sind?

    Es geht um das siderische Jahr, also um eine vollständige Umrundung von außen betrachtet.

    ~Edit: Pedanterie~



  • also, falls ich das jez richtig verstanden habe. ich verschiebe die planten in den ursprung lasse sie rotieren und verschieb die wieder zurück.

    Dann verschieb den Mond zur Position des Planeten, dann in den ursprung, lass ihn wie den Planeten rotieren, schiebe ihn an die position des planeten, rotiere ihn mit der Mondrotation und schieb den Mond wieder weg. Sollte dann doch passen, oder?



  • klingt plausibel. nur schaff ich das grad iwie nich.. -.- mein hirn will nich mehr so wie ich will.. ich kann das ja nich alles in eine zeile schreiben weil sich ja sonst die ganzen translates und rotates multiplizieren und dann totaler müll iwie rauskommt.


  • Mod

    Dann mach es nicht in einer Zeile, sondern schön hübsch nacheinander. Achte auf die richtige Reihenfolge der Translationen und Drehungen, die sind nicht assoziativ.



  • ich heul gleich xDD es klappt immer nur eine sache
    entweder der mond dreht sich an nur einem punkt um die erde, aber nicht mit der erde um die sonne. oder der mond dreht sich mit der erde um die sonne aba bleibt immer an der gleichen stelle von der erde.... sobald ich beide aufeinmal mach, saust der mond immer von iwo her durchs bild xD zum verzweifeln 😣



  • Wie sieht Dein Code denn jetzt aus?



  • void main ()
    {
      Window myWindow(640, 480, "Sonnensystem - Gruppe B");
    
      // Positionierung
      Mesh sonne("../meshes/D/yellow.obj");
      Mat4f position_sonne = translate(320, 240, 0) * scale(6);
      sonne = transformPoints(sonne, position_sonne);
    
      Mesh merkur("../meshes/D/gray.obj");
      Mat4f position_merkur = translate(320, 298, 0) * scale(1.2);
      merkur = transformPoints(merkur, position_merkur);
    
      Mesh venus("../meshes/D/gray.obj");
      Mat4f position_venus = translate(320, 340, 0) * scale(3);
      venus = transformPoints(venus, position_venus);
    
      Mesh erde("../meshes/D/blue.obj");
      Mat4f position_erde = translate(320, 390, 0) * scale(3.2);
      erde = transformPoints(erde, position_erde);
    
      Mesh mond("../meshes/D/gray.obj");
      Mat4f position_mond = translate(345, 390, 0) * scale(0.8);
      mond = transformPoints(mond, position_mond);
    
      Mesh mars("../meshes/D/orange.obj");
      Mat4f position_mars = translate(320, 468, 0) * scale(1.6);
      mars = transformPoints(mars, position_mars);
    
      Mesh phobos("../meshes/D/gray.obj");
      Mat4f position_phobos = translate(338, 468, 0) * scale(0.75);
      phobos = transformPoints(phobos, position_phobos);
    
      Mesh deimos("../meshes/D/gray.obj");
      Mat4f position_deimos = translate(290, 468, 0) * scale(0.5);
      deimos = transformPoints(deimos, position_deimos);
    
      positionLight(Vec4f(320,240,0,1));
    
      while (myWindow.IsOpen())
      {
    
        myWindow.HandleEvents();
    
        myWindow.Clear();
    
        // Code
    	rasterizeMesh(sonne);
    
    	Mat4f move_merkur = translate(320, 240, 0) * rotate(360 / 87.969) * translate(-320, -240, 0);
    	merkur = transformNormals(merkur, move_merkur);
    	merkur = transformPoints(merkur, move_merkur);
    	rasterizeMesh(merkur);
    
    	Mat4f move_venus = translate(320, 240, 0) * rotate(360 / 224.701) * translate(-320, -240, 0);
    	venus = transformNormals(venus, move_venus);
    	venus = transformPoints(venus, move_venus);
    	rasterizeMesh(venus);
    
    	Mat4f move_erde = translate(320, 240, 0) * rotate(360 / 365.256) * translate(-320, -240, 0);
    	erde = transformNormals(erde, move_erde);
    	erde = transformPoints(erde, move_erde);
    	rasterizeMesh(erde);
    
    	Mat4f move_mond = translate(320, 240, 0) 
    		* rotate(360 / 365.256) 
    		* translate(-320, -240, 0)
    		* translate(320, 390, 0)
    		* rotate(360 / 27.3217)
    		* translate(-320, -390, 0);
    
    	mond = transformNormals(mond, move_mond);
    	mond = transformPoints(mond, move_mond);
    	rasterizeMesh(mond);
    
    	Mat4f move_mars = translate(320, 240, 0) * rotate(360 / 686.98) * translate(-320, -240, 0);
    	mars = transformNormals(mars, move_mars);
    	mars = transformPoints(mars, move_mars);
    	rasterizeMesh(mars);
    
    	Mat4f move_phobos = translate(320, 468, 0) * rotate(360 / 224.701) * translate(-320, -468, 0);
    	phobos = transformNormals(phobos, move_phobos);
    	phobos = transformPoints(phobos, move_phobos);
    	rasterizeMesh(phobos);
    
    	Mat4f move_deimos = translate(320, 468, 0) * rotate(360 / 224.701) * translate(-320, -468, 0);
    	deimos = transformNormals(deimos, move_deimos);
    	deimos = transformPoints(deimos, move_deimos);
    	rasterizeMesh(deimos);
    
        myWindow.Display();
      }
    

    da wo die translates usw untereinander stehn, is das was ich meine verstanden zu haben was kleiner troll meint. nur funzt das nich, aba ich geh ma davon aus das es an mir liegt weil ich grad echt überfordert bin.. kann mir denn keiner sagen wie ich das richtig schreibn damit ichs für die zukunft weiß, und nich weitere stunden wut, wegn meines eigenen nichtkönnens aufkommt xD


  • Mod

    mauka schrieb:

    da wo die translates usw untereinander stehn, is das was ich meine verstanden zu haben was kleiner troll meint. nur funzt das nich, aba ich geh ma davon aus das es an mir liegt weil ich grad echt überfordert bin.. kann mir denn keiner sagen wie ich das richtig schreibn damit ichs für die zukunft weiß, und nich weitere stunden wut, wegn meines eigenen nichtkönnens aufkommt xD

    Zu unlesbar wegen zuvieler magischer Werte. Außerdem kann das keiner zuhause ausprobieren, weil uns deine Bibliotheken fehlen. Man kann es daher nur mit Worten erklären:

    Wenn du die Erde dreht:
    0. Den Mond die gleiche Drehung machen lassen.
    Dann, wenn der Mond drankommt:
    1. Position der Erde von der Position des Mondes abziehen
    2. Monddrehung anwenden
    3. Position der Erde hinzu addieren


Anmelden zum Antworten