kurse:efcomputergrafik:kw44

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.

Daten_erfassen.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;
 
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.

csv_datei_lesen.py
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 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).
  • kurse/efcomputergrafik/kw44.txt
  • Last modified: 2019/10/29 15:17
  • by Marcel Metzler