Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Punkterotation
inflames2k
myCSharp.de - Experte

Avatar #AARsmmPEUMee0tQa2JoB.png


Dabei seit:
Beiträge: 2.296

Themenstarter:

Punkterotation

beantworten | zitieren | melden

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 °.


Dieser Beitrag wurde 4 mal editiert, zum letzten Mal von inflames2k am .
Attachments
Wissen ist nicht alles. Man muss es auch anwenden können.

PS Fritz!Box API - TR-064 Schnittstelle | PS EventLogManager | Spielkartenbibliothek
private Nachricht | Beiträge des Benutzers
MrSparkle
myCSharp.de - Team

Avatar #avatar-2159.gif


Dabei seit:
Beiträge: 5.655
Herkunft: Leipzig

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
inflames2k
myCSharp.de - Experte

Avatar #AARsmmPEUMee0tQa2JoB.png


Dabei seit:
Beiträge: 2.296

Themenstarter:

beantworten | zitieren | melden

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 | Spielkartenbibliothek
private Nachricht | Beiträge des Benutzers