Benutzer-Werkzeuge

Webseiten-Werkzeuge


bilder_rotieren

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
bilder_rotieren [2024/01/20 11:23] – [Herleitung der Transformationsgleichung:] torsten.roehlbilder_rotieren [2024/02/07 08:23] (aktuell) torsten.roehl
Zeile 12: Zeile 12:
  
  
-|FIXME|FIXME+{{ :inf:java:smiley00.png?150 |}} |{{ :inf:java:smiley45.png? |}}
-|Das originale Bild ist hier Quadratisch FIXME.|Das Bild wurde um 45° Grad gegen den Uhrzeigersinn gedreht.Damit das komplette Bild sichtbar ist muss es jetzt FIXME  groß sein. |+|Das originale Bild ist hier Quadratisch mit ''222x222'' Pixeln.|Das Bild wurde um 45° Grad im Uhrzeigersinn gedreht. Damit das komplette Bild sichtbar ist muss es jetzt ''314x314'' Pixel  groß sein. |
  
  
Zeile 43: Zeile 43:
  
 \begin{equation}  \color{blue}{p\prime_x} = cos(\varphi)\cdot \color{red}{p_x} - sin(\varphi) \cdot \color{red}{p_y}  \\  \color{blue}{p\prime_y} = sin(\varphi)\cdot \color{red}{p_x} + cos(\varphi) \cdot \color{red}{p_y} \end{equation} \begin{equation}  \color{blue}{p\prime_x} = cos(\varphi)\cdot \color{red}{p_x} - sin(\varphi) \cdot \color{red}{p_y}  \\  \color{blue}{p\prime_y} = sin(\varphi)\cdot \color{red}{p_x} + cos(\varphi) \cdot \color{red}{p_y} \end{equation}
-==== Beispiel ==== 
  
 +{{:inf:sample.gif?|}}
 <WRAP center round box 100%> <WRAP center round box 100%>
-**Aufgabe:**\\+{{:inf:aufgabe.gif?|}} 
 Wie lauten die Koordinaten des neuen Bildpunktes bei einer Drehung um **40°**, wenn der alte Bildpunkt **P(10,30)** ist?\\ Wie lauten die Koordinaten des neuen Bildpunktes bei einer Drehung um **40°**, wenn der alte Bildpunkt **P(10,30)** ist?\\
-**Lösung:**\\+ 
 +{{:inf:solution.gif?|}} 
 Für den Sinus und Cosinus ergibt sich: Für den Sinus und Cosinus ergibt sich:
   * sin(40°)=0,643   * sin(40°)=0,643
Zeile 86: Zeile 89:
 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. 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<color #ff7f27> $\text{Bild}_{\text{ALT}}$</color> werden die  Größe (Breite und Höhe) ermittelt.+  - Vom zu rotierenden Bild<color #ff7f27> $\text{Bild}_{\text{ALT}}$</color> wird die  Größe (Breite und Höhe) ermittelt.
   - Ein leeres Bild <color #7092be>$\text{Bild}_{\text{NEU}}$</color> wird erzeugt.   - Ein leeres Bild <color #7092be>$\text{Bild}_{\text{NEU}}$</color> wird erzeugt.
       * Die neue Größe kann aus der alten Größe ermittelt werden!       * Die neue Größe kann aus der alten Größe ermittelt werden!
Zeile 114: Zeile 117:
  
 Mit **toScreen** bezeichnen wir eine Java-Methode, die (mathematisch) kartesische Koordinaten in Bildkoordinaten transformiert. Mit **toScreen** bezeichnen wir eine Java-Methode, die (mathematisch) kartesische Koordinaten in Bildkoordinaten transformiert.
-  * Bildkoordinaten haben ihren Ursprung (0|) oben links und  besitzen nur positive integer Werte+  * Bildkoordinaten haben ihren Ursprung (0|0) oben links und  besitzen nur positive integer Werte
  
  
  
 ===== Herleitung der Transformationsgleichung: ===== ===== Herleitung der Transformationsgleichung: =====
- 
-Angewandte Informatik 
-ist geschlossen 
- 
-    Office Pakete (Textverarbeitung, Tabellenkalkulation und Präsentation) 
-        Office Anwendungen 
-        Datenbanken 
-    Bildverarbeitung 
-        Bildverarbeitung 
-    MSR (Messen Steuern Regeln) und Robotik 
-        Hardware-Überlebensregeln 
-        Lego Roboter (leJOS) 
-            Beispiele der LEJOS Bibliothek 
-            Ein neuronales Netz für den NXT Roboter 
-        Mikrocontroller IO-Warrior 
-        Android Programmierung 
-        Raspberry Pi 
-    Softcomputing/ Künstliche Intelligenz & Komplexe Systeme 
-        IFS - Iterierte Funktionensysteme 
-        Sierpinski-Dreieck 
-        ..Neuronale Netze 
-            Was sind neuronale Netze? 
-            Hopfield-Netze 
-                Grundlagen zu Hopfield-Netzen 
-                Hopfield-Netz in Aktion 
- 
-Praktische Informatik 
-ist geschlossen 
- 
-    Java 
-        Java Grundlagen 
-        Java Applet 
-        Java & Datenbanken 
-        Java & Bildverarbeitung 
-    Hardware & Betriebssysteme 
-        Funktionsprinzip des Computers 
-        Betriebssystemarchitektur 
-    Linux 
-        Linux Essentials 
-        Linux - Grundlagen - Konsole 
- 
-Technische Informatik 
-ist geschlossen 
-Theoretische Informatik 
-ist geschlossen 
-Fächerübergeifender Unterricht 
-ist geschlossen 
- 
-    Physik 
-    Biologie 
- 
-Aufgaben & Tests 
-ist geschlossen 
- 
-    Aufgaben & Tests 
- 
-Login Form 
- 
-Benutzername 
- 
-Passwort 
- 
-Angemeldet bleiben 
- 
-    Passwort vergessen? 
-    Benutzername vergessen? 
- 
-Bilder Rotieren 
-  
- 
-      Dieser Abschnitt zeigt wie sich Bilder um einen beliebigen Winkel φ (sprich PHI) rotieren lassen. 
- 
-    Rotation (lat. rotatio: Drehung) 
- 
-    
- 
- 
- 
-Wenn Bilder um einen Winkel φ gedreht (rotiert) werden sollen, muss beachtet werden, dass das rotierte Bild eventuell größer als das orginale Bild werden kann. 
- 
-  
-orginal todo gedrehtes Bild todo 
-Das orginale Bild ist hier Quadratisch todoxtodo. Das Bild wurde um 45° Grad gegen den Uhrzeigersinn gedreht. 
-Damit das komplete Bild sichtbar ist muss es jetzt todoxtodo groß sein. 
- 
-  
- 
-    Wenn Bilder gedreht werden, ist das Drehzentrum in der Regel der Mittelpunkt des Bildes 
-    Der wichtgste Parameter bei der Rotation ist der Drehwinkel φ. Die Drehung erfolgt gegen den Uhrzeigersinn 
-    In Java werden die Drehwinkel nicht in Grad, sondern in Rad angegeben. Es gilt 360° = 2 Π rad. Winkel werden also nicht im Gradmaß, sondern im Bogenmaß verwendet. 
- 
- 
-Für die Umrechnung vom Gradmaß in das Bogenmaß gilt die Beziehung: 
- 
- 
- 
- 
-  
-Die Transformationsgleichung für die Rotation 
- 
-Bei der Rotation wird jeder Bildpunkt P(x|y) des Orginalbildes in einen neuen Bildpunkt P´(x|y) überführt. 
- 
-    mit altem Bildpunkt P( px | py ) bezeichnen wir die Bildpunkte des orginalen Bildes. 
-    mit neuem Bildpunkt P' ( p´x | p´y ) werden die transformierten Bildpunkte bezeichnet (P´ lies P Strich). 
- 
- 
-Gesucht ist eine Transformation, die ausgehend von dem alten Bildpunkt, sowie dem gewünschen Drehwinkel, einen neuen Bildpunkt berechnet. 
- 
-neuer Bildpunkt = Transformation R(φ) · alter Bildpunkt 
- 
-    R(φ) ist die sogennante Transformationsmatrix um den Winkel φ 
- 
- 
- 
-Wir werden an dieser Stelle die Transformation gleich angeben und zeigen, wie man mit ihr arbeitet. Eine Herleitung dieser Gleichungen ist weiter unten angegeben. 
-Die gesuchten Transformationgleichungen sind: 
- 
- 
-p´x = cos(φ) · px - sin(φ) · py 
- 
-p´y = sin(φ) · px + cos(φ) · py 
- 
- 
-  
- 
-  
- 
-  
- 
-Wie lauten die Koordinaten des neuen Bildpunktes bei einer Drehung um 40°, wenn der alte Bildpunkt P(10,30) ist? 
- 
-  
- 
-  
-     
- 
-Für den Sinus und Cosinus ergibt sich: 
- 
-sin(40°)=0,643 
- 
-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 ). 
- 
- 
- 
-Die folgende Java Methode benutzt die Java Klasse Point, um die Transformation zu berechnen. 
- 
-  
-1 
-2 
-3 
-4 
-5 
-6 
-7 
-8 
-9 
-10 
-11 
-12 
-  
-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; 
-} 
- 
- 
- 
- 
- 
- 
- 
-orginal bild rotiertes bild 
-Orginal. Das um xx Grad gedrehte Bild. 
- 
- 
- 
- 
- 
-Herleitung der Transformationsgleichung: 
- 
 Wir leiten jetzt die im vorherigen Abschnitt angegeben Transformationsgleichungen her. Wir leiten jetzt die im vorherigen Abschnitt angegeben Transformationsgleichungen her.
-Voraussetzungen+==== Voraussetzungen ====
  
-Damit die Herleitung nachvollzogen werden kann, werden lediglich die Additionstheoreme für Sinus und Kosinus benötigt. 
-Sie lauten: 
  
-cos(φ + α ) = cos(φ)·cos(α) - sin(φ)·sin(α)+Damit die Herleitung nachvollzogen werden kann, werden lediglich die Additionstheoreme für Sinus und Kosinus benötigt. 
  
-sin(φ + α ) = sin(φ)·cos(α) + cos(φ)·sin(α) 
  
 +  * 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, sie in das Gedächtnis gerufen zu haben.
-Eine einfache Herleitung dieser Formel kann mit Hilfe der komplexen Zahlen (Eulerformel) erfolgen. Für unsere Zwecke ist es ausreichend, sie in das Gedächtnis gerufen zu haben.+
 ==== Herleitung ==== ==== Herleitung ====
  
 +|{{:inf:java:rot2d.png?320|}} | {{:inf:java:cossin.png?170|}}| 
 +|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!** | 
 +|<WRAP>Ausgehend von den Addtionstheoremen für Cosinus und Sinus, werden zuerst cos(α) bzw. sin(α) durch ihre rechten Seiten ersetzt.\\ \\  Jetzt ersetzen wir 
 +sin(φ+α) bzw. cos(φ+α) durch ihre rechten Seiten. \\ \\ \\ \\ Der Radius r kürzt sich heraus.</WRAP> | {{:inf:java:herleitung.png?330|}}| 
 +| Damit sind die oben angegebenen Transformationsgleichungen gefunden. :-) ||
  
  
  
  
bilder_rotieren.1705749831.txt.gz · Zuletzt geändert: 2024/01/20 11:23 von torsten.roehl