kurse:efcomputergrafik:kw37

This is an old revision of the document!


Aus unserer Kindheit kennen wir Fadenbilder. Etwas ähnliches wollen wir diese Woche programmieren.

Dazu ordnen wir $k$ Punkte in einem Kreis mit Radius $R=100$ symmetrisch an. Die Punkte werden dabei durchnummeriert, beginnend bei 0. Bei einen n-Table wird der Punkt mit der Nummer $i$ mit dem Punkt $n\cdot i$ verbunden.

Für ein $n=2$ ergeben sich folgende Verbindungen:

  • 0 zu 0 (keine Linie)
  • 1 zu 2
  • 2 zu 4
  • 3 zu 6
  • 4 zu 8
  • k-2 zu (2k-4) mod k
  • k-1 zu (2k-2) mod k

Aufgabe 1

  • Erstelle ein 2-Table mit k=30 Punkten

Dazu einige Tipps:

Die Punkte liegen alle auf einem Kreis mit Radius 100 um den Koordinatenursprung. Die Koordinaten sind dann $$x(\varphi)=R\cdot \cos(\varphi) \qquad \text{und} \qquad y(\varphi)=R \cdot \sin(\varphi) $$ Der Winkel $\varphi$ hängt von der Punktnummer ab. Für die Winkeländerung von Punkt zu Punkt gilt: $$\Delta \varphi = \dfrac{2\pi}{k}$$ Damit gilt $$x(i)=R\cdot \cos(\Delta\varphi\cdot i) \qquad \text{und} \qquad y(i)=R \cdot \sin(\Delta\varphi\cdot i) $$Sinnvollerweise werden die Punkte einmal berechnet und in einer Liste Punkte abgelegt. Nachher muss nur die Liste durchlaufen werden und der Punkt n wird mit dem Punkt 2n mod k verbunden. Dazu verwenden wir den Befehl line(xStart,yStart,xEnd,yEnd).

Click to display ⇲

Click to hide ⇱

2-table
from math import pi,cos,sin
from gpanel import *
makeGPanel(-120, 120, -120, 120)
 
anz=30
radius=100
dphi=2*pi/anz
punkte=[]
for i in range(anz):
    punkte.append([radius*cos(i*dphi),radius*sin(i*dphi)])
 
 
for i in range(anz):
      move(punkte[i][0],punkte[i][1])
      fillCircle(1)
      #delay(25)
# two-table
n=2
for i in range(anz):
    line(punkte[i][0],punkte[i][1],punkte[(n*i)%anz][0],punkte[(n*i)%anz][1])
    #delay(100)

Mit den beiden delay Befehlen könnt ihr dem Aufbau des Bildes folgen. Wer nur am Endbild interessiert ist, der kann nicht nur die beiden delay Befehle entfernen, sondern kann auch die beiden for Schleifen zusammenfassen.

Aufgabe 2

  1. Um das Bild zu verfeinern setze k=100 Punkte
  2. Erweitere eine Programm so, dass k von 30 bis 100 schrittweise durchläuft. Warte nach jedem Bild 200 ms.
  3. Welches Bild ergibt sich?

Click to display ⇲

Click to hide ⇱

Es entsteht die Kardioide, welche wir von der Mandelbrotmenge und vom abrollenden Kreis auf einem Kreis her kennen.

  • kurse/efcomputergrafik/kw37.1567864007.txt.gz
  • Last modified: 2019/09/07 15:46
  • by Marcel Metzler