kurse:efcomputergrafik:kw43

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

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 von Linienzeichnungen==== 
 + 
 +**Aufgabe 3** 
 + 
 +Analysiere folgendes Programm. Was ist neu? 
 +<code python Fourier.py> 
 +from gpanel import * 
 +import math 
 +import cmath 
 +import time 
 + 
 +def onMousePressed(x, y): 
 +    move(x,y) 
 + 
 +def onMouseDragged(x, y): 
 +    draw(x,y) 
 +    Koordinaten.append([x,y]) 
 +    f.write(str(x) + "," + str(y) + "\n"
 + 
 +makeGPanel(0,100,0,100, 
 +           mousePressed = onMousePressed,  
 +           mouseDragged = onMouseDragged) 
 + 
 +nameD=time.strftime("Daten_%Y_%m_%d_%H_%M_%S.txt"
 +nameF=time.strftime("Fourier_%Y_%m_%d_%H_%M_%S.txt"
 +Koordinaten=[] 
 +f=open(nameD,"w"
 +fopen=1; 
 + 
 +while fopen==1: 
 +    key = getKeyCodeWait() 
 +    if key==27: 
 +       f.close() 
 +       fopen=0 
 +print("Daten erfasst"
 +</code> 
 + 
 +===Konventionen und Anpassungen für die Datenkomprimierung=== 
 +Sei $f$ eine 1-periodische Funktion, welche unser Bild beschreibt. 
 +$$ f: \; \left[0,1\right] \; \rightarrow \; \mathbb{C}, \quad t \;\mapsto z=x+i\cdot y $$ 
 +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, d.h. mit $$\Delta t = \frac{1}{n-1}$$ folgt dann für ein $k\in \{1,2,3,...,n\}$, dass $P_k(x_k|y_k)$ als $f((k-1)\Delta t)=x_k+i\cdot y_k$ interpretiert wird. 
 + 
 +Wir wollen unser $f$ welches wir nun anhand von einer endlichen Anzahl von Punkten kennen mit einem komplexen Fourierreihe approximieren, darstellen.  
 +$$f(t)=\sum_{k=-\infty}^{\infty}c_k \cdot e^{ikt}  \approx \sum_{k=-n}^{n}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 "Riemann"-Summe, d.h. 
 +$$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.
  • kurse/efcomputergrafik/kw43.txt
  • Last modified: 2019/10/29 15:15
  • by Marcel Metzler