Differences
This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
kurse:efcomputergrafik:kw43 [2019/10/23 14:17] Marcel Metzler [Fourier Koeffizienten] |
kurse:efcomputergrafik:kw43 [2019/10/29 15:15] Marcel Metzler [Anwendung Datenkomprimierung von Linienzeichnungen] |
||
---|---|---|---|
Line 65: | Line 65: | ||
Rechne $a_k$ vollständig durch. | Rechne $a_k$ vollständig durch. | ||
- | ====Anwendung Datenkomprimierung Linienzeichnungen==== | + | ====Anwendung Datenkomprimierung |
+ | |||
+ | **Aufgabe 3** | ||
+ | |||
+ | Analysiere folgendes Programm. Was ist neu? | ||
+ | <code python Fourier.py> | ||
+ | from gpanel import * | ||
+ | import math | ||
+ | import cmath | ||
+ | import time | ||
+ | |||
+ | def onMousePressed(x, | ||
+ | move(x,y) | ||
+ | |||
+ | def onMouseDragged(x, | ||
+ | draw(x,y) | ||
+ | Koordinaten.append([x, | ||
+ | f.write(str(x) + "," | ||
+ | |||
+ | makeGPanel(0, | ||
+ | | ||
+ | | ||
+ | |||
+ | nameD=time.strftime(" | ||
+ | nameF=time.strftime(" | ||
+ | Koordinaten=[] | ||
+ | f=open(nameD," | ||
+ | fopen=1; | ||
+ | |||
+ | while fopen==1: | ||
+ | key = getKeyCodeWait() | ||
+ | if key==27: | ||
+ | | ||
+ | | ||
+ | print(" | ||
+ | </ | ||
+ | |||
+ | ===Konventionen und Anpassungen für die Datenkomprimierung=== | ||
+ | Sei $f$ eine 1-periodische Funktion, welche unser Bild beschreibt. | ||
+ | $$ f: \; \left[0, | ||
+ | D.h. wir fassen die Bildpunkte $P(x|y)$ als Punkte in der komplexen Zahlenebene auf. Der erste Punkt $P_0(x_0|y_0)$ ist $f(0)=x_0+i\cdot y_0$, der letzte Punkt $P_n(x_n|y_n)$ ist $f(1)=x_n+i\cdot y_n$, dazwischen wird linear interpoliert, | ||
+ | |||
+ | Wir wollen unser $f$ welches wir nun anhand von einer endlichen Anzahl von Punkten kennen mit einem komplexen Fourierreihe approximieren, | ||
+ | $$f(t)=\sum_{k=-\infty}^{\infty}c_k \cdot e^{ikt} | ||
+ | Für den komplexen Fourierkoeffizienten $c_k$ gilt: | ||
+ | $$c_k=\frac{1}{2\pi}\int_0^{2\pi} f(t)\cdot e^{-ikt}dt $$ | ||
+ | Aufgrund unserer Anpassung, d.h. weil $f$ 1-periodisch ist ergibt sich folgende Vereinfachung. | ||
+ | $$c_k=\int_0^1 f(t)\cdot e^{-2\pi ikt}dt $$ | ||
+ | Das Integral berechnen wir über eine " | ||
+ | $$c_k=\int_0^1 f(t)\cdot e^{-ikt}dt \approx \sum_{j=0}^{n-1}f(j\cdot \Delta t)\cdot e^{-2\pi ikj\cdot \Delta t}\cdot \Delta t$$ | ||
+ | |||
+ | **Aufgabe 4** | ||
+ | |||
+ | Ergänze das obige Programm so, dass | ||
+ | * die komplexen Fourierkoeffizienten $c_k$ berechnet werden und | ||
+ | * diese in einem File abgespeichert werden. Pro Zeile soll nur ein Fourierkoeffizient stehen. |