bilder_rotieren
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen RevisionVorhergehende ÜberarbeitungNächste Überarbeitung | Vorhergehende Überarbeitung | ||
bilder_rotieren [2024/01/20 09:54] – [Transformationsgleichungen] torsten.roehl | bilder_rotieren [2024/02/07 08:23] (aktuell) – torsten.roehl | ||
---|---|---|---|
Zeile 12: | Zeile 12: | ||
- | |FIXME|FIXME| | + | | {{ : |
- | |Das originale Bild ist hier Quadratisch | + | |Das originale Bild ist hier Quadratisch |
Zeile 40: | Zeile 40: | ||
==== Transformationsgleichungen ==== | ==== Transformationsgleichungen ==== | ||
- | Wir werden an dieser Stelle die Transformation gleich angeben und Anschließend | + | Wir werden an dieser Stelle die Transformation gleich angeben und anschließend |
- | Die gesuchten | + | |
- | \begin{equation}\begin{align} p\prime_x = cos(\varphi)\cdot p_x - sin(\varphi) \cdot p_y \\ p\prime_y = sin(\varphi)\cdot p_x + cos(\varphi) \cdot p_y \end{equation} | + | \begin{equation} |
- | ==== Beispiel ==== | + | {{: |
+ | <WRAP center round box 100%> | ||
+ | {{: | ||
+ | Wie lauten die Koordinaten des neuen Bildpunktes bei einer Drehung um **40°**, wenn der alte Bildpunkt **P(10, | ||
+ | |||
+ | {{: | ||
+ | |||
+ | Für den Sinus und Cosinus ergibt sich: | ||
+ | * sin(40°)=0, | ||
+ | * cos(40°)=0.766 | ||
+ | |||
+ | Eingesetzt in die Transformationsformeln ergibt sich: | ||
+ | * px´ = 0.766·10 - 0,643·30 = -11,63 | ||
+ | * py´ = 0,643·10 + 0,766·30 = 29,41 | ||
+ | |||
+ | Die neuen Koordinaten sind damit** P´( -11,63 | 29,41 )**. | ||
+ | </ | ||
+ | ==== Java Methode zum Rotieren ==== | ||
+ | Die folgende Java Methode benutzt die Java Klasse Point, um die Transformation zu berechnen. | ||
+ | |||
+ | <Code Java linenums: | ||
+ | public Point rotation(Point point, double angle){ | ||
+ | |||
+ | Point result = new Point(); | ||
+ | |||
+ | double c = Math.cos(angle); | ||
+ | double s = Math.sin(angle); | ||
+ | |||
+ | result.x = c*point.x - s*point.y; | ||
+ | result.y = s*point.x + c*point.y; | ||
+ | |||
+ | return result; | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | | FIXME|FIXME | | ||
+ | |Orginal.|Das um FIXME Grad gedrehte Bild. | | ||
===== Grundprinzip zum Rotieren von Bildern ===== | ===== Grundprinzip zum Rotieren von Bildern ===== | ||
- | ==== Koordinaten toScreen | + | |
+ | |||
+ | ==== fromScreen | ||
+ | |||
+ | Um Bilder zu rotieren, müssen grundsätzlich folgende Schritte abgearbeitet werden. Wir gehen hier davon aus, dass das Bild um seine Bildmitte rotiert werden soll. | ||
+ | |||
+ | - Vom zu rotierenden Bild< | ||
+ | - Ein leeres Bild <color # | ||
+ | * Die neue Größe kann aus der alten Größe ermittelt werden! | ||
+ | - für jeden Bildpunkt des zu rotierenden Bildes | ||
+ | * **fromScreen** Die Bildkoordinaten werden in kartesische | ||
+ | * Die kartesischen Koordinaten werden mithilfe der Transformationsformel um einen gegebenen Winkel rotiert. | ||
+ | * **toScreen** Die rotierten kartesischen Koordinaten werden wieder in Bildkoordinaten umgerechnet. | ||
+ | * Die so berechneten Bildkoordinaten werden im <color # | ||
+ | |||
+ | < | ||
+ | </ | ||
+ | |||
+ | |||
+ | |||
+ | === fromScreen === | ||
+ | |<color # | ||
+ | |||
+ | |||
+ | Mit **fromScreen** bezeichnen wir eine Java-Methode, | ||
+ | * Kartesische Koordinaten, | ||
+ | * häufig ist der Koordinatenursprung in der Mitte des Bildes überaus zweckmäßig. | ||
+ | |||
+ | |||
+ | === toScreen === | ||
+ | |<color # | ||
+ | |||
+ | |||
+ | Mit **toScreen** bezeichnen wir eine Java-Methode, | ||
+ | * Bildkoordinaten haben ihren Ursprung (0|0) oben links und besitzen nur positive integer Werte | ||
===== Herleitung der Transformationsgleichung: | ===== Herleitung der Transformationsgleichung: | ||
- | ==== Herleitung | + | Wir leiten jetzt die im vorherigen Abschnitt angegeben Transformationsgleichungen her. |
+ | ==== Voraussetzungen | ||
+ | Damit die Herleitung nachvollzogen werden kann, werden lediglich die Additionstheoreme für Sinus und Kosinus benötigt. | ||
+ | |||
+ | |||
+ | * cos(φ + α ) = cos(φ)·cos(α) - sin(φ)·sin(α) | ||
+ | * sin(φ + α ) = sin(φ)·cos(α) + cos(φ)·sin(α) | ||
+ | |||
+ | Eine einfache Herleitung dieser Formel kann mit Hilfe der komplexen Zahlen (Eulerformel) erfolgen. Für unsere Zwecke ist es aber ausreichend, | ||
+ | ==== Herleitung ==== | ||
+ | |||
+ | |{{: | ||
+ | |Der rote Punkt wird bei einer Drehung um den Winkel φ in den blauen Punkt überführt (transformiert). |Die oben stehenden Formeln lassen sich direkt aus dem Bild ablesen. \\ **Schauen Sie sich beides solange an, bis ihnen das gelingt!** | | ||
+ | |< | ||
+ | sin(φ+α) bzw. cos(φ+α) durch ihre rechten Seiten. \\ \\ \\ \\ Der Radius r kürzt sich heraus.</ | ||
+ | | Damit sind die oben angegebenen Transformationsgleichungen gefunden. :-) || | ||
bilder_rotieren.1705744476.txt.gz · Zuletzt geändert: 2024/01/20 09:54 von torsten.roehl