# Einen Punkt um den Ursprung drehen



## Seremem (29. Apr 2016)

Ich will einen Punkt, der 10 Einheiten höher als der Urpsrung ist um 90° drehen, sodass er auf der X-Achse liegt. Ja ich weiß, es gibt dazu Tonnen Zeugs im Netz und ich verwende auch die Formel aus dieser Seite hier:
http://www.hinterseher.de/Diplomarbeit/Transformation.html
*x' = x1 + cosq * (x - x1) - sinq * (y - y1)
y' = y1 + sinq * (x - x1) + cosq * (y - y1)*

Leider kommt bei meinem Programm folgende Ausgabe. Das Ergebnis ist zwar irgendwie in der Nähe aber trotzdem viel zu weit vom richtigen Ergebnis entfernt:
x2rotiert = 9.540914674728182
y2rotiert = -2.995153947555356



```
package main;
public class seg
{
   public static void main(String[] args)
   {
     // P(x2|y2) soll um den Ursprung P(0|0) gedreht werden.
    
     // Ursprung
     double x1 = 0;
     double y1 = 0;
    
     double x2 = 0;
     double y2 = 10;
     double winkel = Math.toDegrees(90);
    
     double x2rotiert = x1 + (x2 - x1) * Math.cos(winkel) - (y2 - y1) * Math.sin(winkel);
     double y2rotiert = y1 + (x2 - x1) * Math.sin(winkel) + (y2 - y1) * Math.cos(winkel);
    
     System.out.println("x2rotiert = " + x2rotiert);
     System.out.println("y2rotiert = " + y2rotiert);
   }
}
```


----------



## Neumi5694 (29. Apr 2016)

todegrees macht genau das gegenteil von dem, was du willst.
Math.toDegrees(Math.PI/2) ---> 90

Probier's mal mit toRadians


----------



## Seremem (29. Apr 2016)

Bei double winkel = Math.toRadians(90); kommen noch komischere Werte raus. 
x2rotiert = -10.0
y2rotiert = 6.123233995736766E-16


----------



## mrBrown (29. Apr 2016)

Die Werte passen doch? (0,10) um 90° rotiert ist (-10,0)

6.123233995736766E-16 ist andere Schreibweise für 0.00000000000000061..., da ist einfach nur der Fehler durch doubles dabei


----------



## Seremem (29. Apr 2016)

Ah stimmt, wenn ich jetzt zum int mach, ist das Ganze so wie ich mag. Danke euch!


----------



## ProtonM (1. Mai 2016)

Hallo Seremem

Es ist zwar schon eine Weile her, aber koordinaten werden durch Matrizen von einem KS ins neue übertargen. Es gibt für Rotation, Translation und Skalierung Matrizen, die die Umrechnung der Koordinaten machen. Die Reihenfolge ist dabei wichtig. Erst rotieren und dann verschieben ergibt was anderes als umgekehrt.

Suche mal unter Graphischer DV (so hieß das in den Achtzigern) nach den Rechenvorschriften.


----------

