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:26] Marcel Metzler [Anwendung Datenkomprimierung Linienzeichnungen] |
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** | **Aufgabe 3** | ||
- | Analysiere folgendes Programm. | + | Analysiere folgendes Programm. |
<code python Fourier.py> | <code python Fourier.py> | ||
from gpanel import * | from gpanel import * | ||
Line 76: | Line 76: | ||
import time | import time | ||
- | # | ||
- | # Callback Mouse irgend eine Taste gedrückt | ||
- | # | ||
def onMousePressed(x, | def onMousePressed(x, | ||
move(x,y) | move(x,y) | ||
- | # | + | |
- | # Callback Mouse bewegen, mit gedrückter | + | |
- | # Taste, hier wird das Bild gezeichnet | + | |
- | # | + | |
def onMouseDragged(x, | def onMouseDragged(x, | ||
draw(x,y) | draw(x,y) | ||
Koordinaten.append([x, | Koordinaten.append([x, | ||
f.write(str(x) + "," | f.write(str(x) + "," | ||
- | # | + | |
- | # Beginn Hauptprogramm | + | |
- | # | + | |
makeGPanel(0, | makeGPanel(0, | ||
| | ||
Line 109: | Line 101: | ||
print(" | 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. |