suche formel zur rotation!



  • folgendes...ich habe einen array sprich eine fläche mit 25x25 pixeln...
    jetzt frage ich in 2 gekapselten for schleifen jeden pixel ab und will das ganze um einen beliebigen winkel rotiert auf eine andere fläche zeichen (die natürlich grösser als 25x25 ist)
    unrotiert würde ich das einfach so machen:

    for(int i = 0;i<25;i++)
    {
    for(int j = 0;j<25;j++)
    {
    array2[i][j] = array1[i][j];
    }
    }
    

    nur wie mache ich das ganze mit rotation? formel gesucht!
    danke!



  • Crossposting find ich echt Scheisse.

    Bye, TGGC



  • ja sry, dachte die mathematiker wissen vielleicht besser bescheid...



  • Um welchen punkt soll gedeht werde? Mittelpunkt der 25 x 25 matrix oder eine der ecken oder wie?



  • helfender schrieb:

    Um welchen punkt soll gedeht werde? Mittelpunkt der 25 x 25 matrix oder eine der ecken oder wie?

    oh ja sry...um den mittelpunkt!



  • Überleg doch mal selbst.
    Bisschen sinus, bisschen cosinus, und bald hat man was man braucht.



  • Rotation um θ: Multiplikation mit exp(iθ), also
    x+iy(xcosθysinθ)+i(xsinθ+ycosθ)x + iy \mapsto (x\cos{\theta} -y\sin\theta) + i(x\sin\theta + y\cos\theta)



  • Hast Du mal die Threads hier angesehen?

    PS: Wer lesen kann ist echt im Vorteil!



  • Es gibt dafür 2 Ansätze:

    1. Mit den Winkelfunktionen zuerst den Winkel zwischen der Strecke des zu drehenden Pixels zum Mittelpunkt und der horizontalen Strecke vom Mittelpunkt nach rechts ausrechnen. Dann den Drehwinkel addieren. Abschließend mit Sin und Cos wieder die Koordinaten bestimmten (die dann aber relativ zum Mittelpunkt rauskommen).

    2. Etwas professioneller wird das mit einer Matrix-Multiplikation gemacht.
    Wenn man die Matrizen ausmultipliziert kommen im Endeffekt folgende Formeln für x und y raus:

    neue_position_x = cos(rotationswinkel) * (position_x / 2) - sin(rotationswinkel) * (position_x / 2);
    neue_position_y = sin(rotationswinkel) * (position_y / 2) + cos(rotationswinkel) * (position_y / 2);

    position_x und position_y sind dabei relativ zum Mittelpunkt anzugeben (wenn der Punkt links bzw. oberhalb des Mittelpunktes liegt sind die Werte negativ, sonst positiv). Auch die Ergebnisse sind wieder relativ.

    mfg


Anmelden zum Antworten