Linie drehen



  • Hi,

    ich habe eine Linie x1,y1 - x2,y2 welche parallel zur X-Achse liegt. Diese würde ich jetzt gerne drehen - und zwar den Punkt x2,y2 um den Mittelpunkt x1,y1.

    Prinzipiell geht das ja mit sin()/cos() - nur wie bringe ich da den Radius mit rein, der sich auch der Länge der Strecke ergibt? Und wie lege ich x1,y1 als Mittelpunkt fest?



  • Du berechnest die entsprechende Abbildungsmatrix, das geht recht einfach. Danach multiplizierst du die beiden Endpunkte der Strecke mit dieser. So jedenfalls der allgemeine Fall. Und ich glaube, das ist im Endeffekt einfacher wie das direkte Vorgehen.



  • Ich fürchte, in dem Fall ist das nicht einfacher: ich muss eine einzelne Linie einmalig berechnen - der Umweg über eine Matrix wäre da doch arg umständlich.



  • affi nity schrieb:

    Du berechnest die entsprechende Abbildungsmatrix, das geht recht einfach. Danach multiplizierst du die beiden Endpunkte der Strecke mit dieser. So jedenfalls der allgemeine Fall. Und ich glaube, das ist im Endeffekt einfacher wie das direkte Vorgehen.

    Also er soll:

    - eine Transformationsmatrix anlegen, um den Mittelpunkt auf 0,0 zu bekommen
    - dazu eine Rotationsmatrix multiplizieren
    - dazu wieder eine Transformationsmatrix multiplizieren um an die Urpsrungsposition zurück zu bekommen
    - das Ergebnis auf den Punkt x2,y2 anwenden

    ...und das alles um einen einzigen (!!!) Punkt zu rotieren! Geht es noch umständlicher?

    Ich hoffe, du schreibst keine Software, die wäre nämlich maßlos ineffizent.



  • wie wärs mit (nehmen wir mal an x2>x1, sonst vertauschen) r=x2-x1, xneu=x1+r*cos(a), yneu=y1+r*sin(a) ?



  • Da deine Strecke parallel zur x-Achse verläuft, ist y1 = y2. Dann ist die Länge der Strecke r = |x2 - x1|.

    Ich nehme an, dass du den Winkel φ hast, um den du deine Strecke rotieren willst. Dann sehen die Koordinaten vom gedrehten Punkt so aus: (x1, y1) + r * (cosφ, sinφ) = (x1 + r * cosφ, y1 + r * sinφ).



  • ... Erster 🙂


Log in to reply