from gpanel import * from vector import Vector import math # Die Datei vector.py muss im gleichen Verzeichnis wie diese Programm liegen. makeGPanel(0,2,0,2) # t in [0,1] # p0, p1, sind Vektoren # Liefert die lineare interpolation def interpolate(t, p0, p1): return (1-t)*p0+t*p1 def linie(p0, p1): line(p0[0], p0[1], p1[0], p1[1]) def kreis(p, typ=0): move(p[0], p[1]) if typ==0: circle(0.04) else: fillCircle(0.02) n = 100 enableRepaint(False) #Waehrend dem Zeichnen nichts anzeigen #pini = [Vector((0.4,0.3,0)), Vector((1.8,1.9,0)), Vector((0.2,1.8,0)), Vector((1.8,0.2,0))] # Liste der zu interpolierenden 3D-Vektoren num = 20; # Folge von Punkten auf einer Lissajou-Figur pini = [Vector([math.sin(i/num*4*math.pi)+1, math.cos(i/num*6*math.pi)+1,0]) for i in range(num)] kurve=[] for i in range(n+1): t=i/n clear() # Bild löschen p = pini while len(p)>1: # Neue Punkte q = [] for j in range(len(p)-1): linie(p[j], p[j+1]) q.append(interpolate(t, p[j], p[j+1])) kreis(q[j]) p = q kurve.append(p[0]) for k in kurve: kreis(k,1) repaint() # Gezeichnetes anzeigen (vermindert flackern) delay(60)