Punkt eines Körpers rechnerisch um eine Achse rotieren

  • Hey @ all,

    eine Frage an die Mathe Genies im Forum. Und zwar folgendes: Wir stellen uns ein Körper (z.B. ein Würfel) vor, den ich um die x- [y, z] Achse um n° drehen möchte (siehe Skizze). Dafür drehe ich alle 8 Punkte des Würfels um die Achse. In meiner Skizze heißt der zu spiegelnde Punkt "P" (den ich erstmal um die x-Achse drehen möchte).
    Ich komme soweit, dass die Strecke PQ (zwischen Achse und Punkt) quasi einen Radius ergeben. Theoretisch läge der um n° gedrehte neue Punkt ja auf dem Umfang des Kreises (2PQ*PI). Nur wie finde ich jetzt x, y und z Koordinate des neuen Punkts heraus? ?(

    Hoffe auf Hilfe,
    thx :)

    Developer30

    Bilder

    "Je mehr Käse, desto mehr Löcher; je mehr Löcher, desto weniger Käse. Ergo: Je mehr Käse, desto weniger Käse. 8| "
    "Programmers never die: they just GOSUB without RETURN"
    "I tried to change the world but I couldn't find the source code."

    Einmal editiert, zuletzt von Developer30 (15. Dezember 2011 um 15:53)

  • Die Koordinate des Punktes ist ein Ortsvektor der Form [X,Y,Z]^T
    Drehungen dieser Art führt man mit Rotationsmatrizen durch.
    Diese Matrix wird mit dem Vektor einfach multipliziert.
    Für die Drehung um die X-Achse lautet diese:

    Code
    | 1    0         0    |
    | 0   cos(p)  -sin(p) |
    | 0   sin(p)   cos(p) |


    Wobei p = der Drehwinkel um die X-Achse ist.
    Multipliziert man nun den Vektor mit der Matrix führt dies zu folgenden neuen Koordinaten des Punktes:

    Code
    Xn = X
    Yn = cos(p)*Y - sin(p)*Z
    Zn = sin(p)*Y - cos(P)*Z


    Wenn man sich dies anschaulich herleiten möchte dann male man sich die Situation einfach mal in der Y-Z-Ebene auf und trage den Drehwinkel mal ein - dann sieht man warum sich die Koordinaten dann so zusammensetzen.

  • danke für die kleine Erläuterung. Ich hatte Matrizen noch nicht in der Schule von daher auch mal interessant :D ..
    Wobei es

    Xn = X
    Yn = cos(p)*Y + sin(p)*Z
    Zn = sin(p)*Y - cos(P)*Z

    sein müsste.. es hieß ja -sin(p)...

    danke ;D.. falls es noch Probleme bei der Umsetzung geben sollte, melde ich mich.

    "Je mehr Käse, desto mehr Löcher; je mehr Löcher, desto weniger Käse. Ergo: Je mehr Käse, desto weniger Käse. 8| "
    "Programmers never die: they just GOSUB without RETURN"
    "I tried to change the world but I couldn't find the source code."

  • hm ok :D
    würde das dann stimmen?

    Code
    für y-Achse
    Xn =  cos(p)*X + sin(p)*Z
    Yn = Y
    Zn = cos(p)*Z - sin(p)*X
    
    
    für z-Achse
    Xn = cos(p)*X - sin(p)*Y
    Yn = sin(p)*X + cos(p)*Y
    Zn = Z

    In welchem "Format" muss p angegeben werden? Welche Zahl entspricht 360°? Denn irgendwie dreht sich das Ding schon bei 0.5 enorm.

    "Je mehr Käse, desto mehr Löcher; je mehr Löcher, desto weniger Käse. Ergo: Je mehr Käse, desto weniger Käse. 8| "
    "Programmers never die: they just GOSUB without RETURN"
    "I tried to change the world but I couldn't find the source code."

  • Radiant.. ok 8|
    das ist dann quasi:

    Code
    rad=(PI/128) * winkel

    "Je mehr Käse, desto mehr Löcher; je mehr Löcher, desto weniger Käse. Ergo: Je mehr Käse, desto weniger Käse. 8| "
    "Programmers never die: they just GOSUB without RETURN"
    "I tried to change the world but I couldn't find the source code."

  • oh hab ich 128 geschrieben :wacko: .. das ist jetzt ein bisschen peinlich^^.. ich meinte auch 180.. die Hälfte von 360..

    "Je mehr Käse, desto mehr Löcher; je mehr Löcher, desto weniger Käse. Ergo: Je mehr Käse, desto weniger Käse. 8| "
    "Programmers never die: they just GOSUB without RETURN"
    "I tried to change the world but I couldn't find the source code."