Laden...

Punkterotation

Erstellt von inflames2k vor 3 Jahren Letzter Beitrag vor 3 Jahren 1.230 Views
inflames2k Themenstarter:in
2.298 Beiträge seit 2010
vor 3 Jahren
Punkterotation

Hallo,

ich bin gerade dabei für Windows CE eine Rotationsfunktion für ein Array von Punkten zu schreiben, die anschließend gezeichnet werden sollen. Das funktioniert soweit erst einmal auch. Allerdings scheine ich irgendwo einen Knoten zu haben, da es augenscheinlich zusätzlich um die Z-Achse rotiert.

Meine Funktion ur Rotation sieht wie folgt aus:


private Point[] Rotate(Point[] originalPoints, int angle, Point middlePoint)
{
    Point[] rotatedArrowPoints = new Point[originalPoints.Length];

    for (int i = 0; i < originalPoints.Length; i++)
    {
        // Punkte um den Mittelpunkt verschieben (Standard 0,0 = oben links)
        double x = originalPoints[i].X - middlePoint.X;
        double y = -originalPoints[i].Y + middlePoint.Y;

        // Berechnung neue Koordinaten 
        x = (x * Math.Cos(angle * Math.PI / 180)) - (y * Math.Sin(angle * Math.PI / 180));
        y = (x * Math.Sin(angle * Math.PI / 180)) + (y * Math.Cos(angle * Math.PI / 180));

        // Verschiebung um Mittelpunkt rückgängig machen
        x = x + middlePoint.X;
        y = (y - middlePoint.Y) * -1;

        rotatedArrowPoints[i] = new Point((Int32)x, (Int32)y);
    }

    return rotatedArrowPoints;
}

Auch ohne die Multiplikation mit Math.PI / 180 sieht das Ergebnis ähnlich verkorkst aus. - Lediglich bei 0 und 180 grad sieht das Bild korrekt aus. Hat jemand eine Idee, an welcher Stelle ich den Rechenfehler mache?

Das Bild im Anhang zeigt die verwendete Beispielzeichnung bei 0°, 30° und 90 °.

Wissen ist nicht alles. Man muss es auch anwenden können.

PS Fritz!Box API - TR-064 Schnittstelle | PS EventLogManager |

5.658 Beiträge seit 2006
vor 3 Jahren

In dieser Zeile verwendest du den bereits geänderten Wert für x anstatt den Original-Wert:


y = (x * Math.Sin(angle * Math.PI / 180)) + (y * Math.Cos(angle * Math.PI / 180));

Weeks of programming can save you hours of planning

inflames2k Themenstarter:in
2.298 Beiträge seit 2010
vor 3 Jahren

Vielen dank. Das wars. 😉

Hab ich absolut nicht gesehen.

Wissen ist nicht alles. Man muss es auch anwenden können.

PS Fritz!Box API - TR-064 Schnittstelle | PS EventLogManager |