====KW44:CSV File lesen und schreiben, Fourier Koeffizienten berechnen==== Eine CSV (comma-separated-values) Datei braucht noch eine Kopfzeile, die als Identifikator der Spalteninhalte dient. Diese Kopfzeile müssen wir noch ergänzen. Da unsere Daten die x- und y-Koordinaten von Punkten in der Ebene sind, müssen wir nur den String 'x,y' als Kopfzeile einfügen. 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; f.write("x,y"+ "\n") while fopen==1: key = getKeyCodeWait() if key==27: f.close() fopen=0 print("Daten erfasst") ===CSV Datei lesen=== Wenn wir die Daten als CSV Datei abgespeichert haben, dann können wir sie aus einem anderen Programm lesen und weiterverarbeiten. Als erstes wollen wir die Daten wieder lesen und anzeigen. from gpanel import * import math import cmath import csv #----------------------------------------- # Einlesen der Daten #----------------------------------------- Koordinaten=[] print('Daten lesen Start') with open('Daten_ksbg.txt') as csvfile: reader=csv.DictReader(csvfile) for row in reader: Koordinaten.append([float(row['x']),float(row['y'])]) print('Daten lesen Ende') Hier die entsprechende Datei {{ :kurse:efcomputergrafik:daten_ksbg.txt |}}. **Aufgabe 1** * Analysiere das obige Programm * Ergänze das obige Programm, so dass die eingelesenen Daten in einem GPanel angezeigt werden. ===Berechnung der Fourier Koeffizienten=== Wir approximieren $f(t)$ ($t\in[0,\;1]$) mit einer endlichen komplexen Fourier Reihe. $$f(t)=\sum_{k=-\infty}^{\infty}c_k \cdot e^{2 \pi ikt} \approx \sum_{k=-n}^{n}c_k \cdot e^{2\pi ikt}$$ Mit den dazugehörigen komplexen Fourier Koeffizienten. $$c_k=\int_0^1 f(t)\cdot e^{-2 \pi 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 2** * Ergänze das obige Programm mit der Berechnung der Fourier Koeffizienten $c_k$ mit $-n\leq k \leq n$ (Fourier-Analyse). * Rekonstruiere $f(t)$ mit den Fourier Koeffizienten und zeichnen die Rekonstruktion in einer anderen Farbe ins gleiche Bild wie die Datenpunkte. (Fourier-Synthese).