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:58] – [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 42: | Zeile 42: | ||
Wir werden an dieser Stelle die Transformation gleich angeben und anschließend an einem Beispiel zeigen, wie man mit ihr arbeitet. Eine Herleitung dieser Gleichungen ist weiter unten angegeben. Die gesuchten Transformationsgleichungen sind: | Wir werden an dieser Stelle die Transformation gleich angeben und anschließend an einem Beispiel zeigen, wie man mit ihr arbeitet. Eine Herleitung dieser Gleichungen ist weiter unten angegeben. Die gesuchten Transformationsgleichungen sind: | ||
- | \begin{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.1705744697.txt.gz · Zuletzt geändert: 2024/01/20 09:58 von torsten.roehl