kurse:efcomputergrafik:kw37

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:kw37 [2019/09/07 15:37]
Marcel Metzler
kurse:efcomputergrafik:kw37 [2019/09/11 20:05] (current)
Marcel Metzler
Line 18: Line 18:
 **Aufgabe 1** **Aufgabe 1**
   * Erstelle ein 2-Table mit k=30 Punkten   * Erstelle ein 2-Table mit k=30 Punkten
-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{360°}{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)//.+ 
 +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)//. 
 + 
 +<hidden> 
 +<code python 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) 
 +</code> 
 +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 zweite und dritte //for// Schleifen zusammenfassen. 
 +</hidden>
  
 **Aufgabe 2** **Aufgabe 2**
-  - Um das Bild zu verfeinern setze k=100 Punkte +  - Um das Bild zu verfeinern setze k=200 Punkte 
-  - Erweitere eine Programm so, dass k von 30 bis 100 schrittweise durchläuft. Warte nach jedem Bild 200 ms.+  - Erweitere eine Programm so, dass k von 30 bis 200 schrittweise durchläuft. Warte nach jedem Bild 100 ms.
   - Welches Bild ergibt sich?   - Welches Bild ergibt sich?
 <hidden> <hidden>
 Es entsteht die Kardioide, welche wir von der Mandelbrotmenge und vom abrollenden Kreis auf einem Kreis her kennen. Es entsteht die Kardioide, welche wir von der Mandelbrotmenge und vom abrollenden Kreis auf einem Kreis her kennen.
-</hidden> +{{:kurse:efcomputergrafik:2-table.png?200|}} 
 +</hidden> 
 + 
 +**Aufgabe 3** 
 +  - Ändere dein Programm so ab, dass n-Tables von n=2 bis n=100 für ein k=200 erstellt werden. Warte nach jedem Bilde 200ms. 
 +  - Ändere dein Programm so ab, dass du über ein Eingabefenster dein $n$ eingeben kannst. Mit einer Eingabe von n<2 beendest du dein Programm.  
 +  - Ändere dein Programm so ab, dass du mit den Pfeiltasten Up und Down das $n$ vergrössern und verkleinern kannst. Schreibe jeweils die Nummer eines $n$-Table über das Bild.  
 +<hidden> 
 +<code python n-k-table> 
 +from math import pi,cos,sin 
 +from gpanel import * 
 +makeGPanel(-120, 120, -120, 120) 
 + 
 +radius=100 
 +anzP=200 
 +UP = 38 
 +DOWN = 40 
 +LEFT = 37 
 +RIGHT = 39 
 + 
 +n=2 
 +key=0 
 +# Ende mit Esc 
 +while key!=27: 
 +    if key==38: 
 +        n=n+1 
 +    if key==40: 
 +        n=n-1 
 +    if key==39: 
 +        anzP=anzP+1 
 +    if key==37: 
 +        anzP=anzP-1 
 +    clear() 
 +    text(-10,110,str(n)+"-Table mit "+str(anzP)+" Punkten"
 +    dphi=2*pi/anzP 
 +    punkte=[] 
 +    for i in range(anzP): 
 +        punkte.append([radius*cos(i*dphi),radius*sin(i*dphi)]) 
 +    for i in range(anzP): 
 +          move(punkte[i][0],punkte[i][1]) 
 +          fillCircle(1) 
 +          line(punkte[i][0],punkte[i][1],punkte[(n*i)%anzP][0],punkte[(n*i)%anzP][1]) 
 +    key=getKeyCodeWait() 
 +</code> 
 +</hidden> 
 + 
 +**Aufgabe 4** 
 + 
 +Je ein Profi und ein Bachelor / eine Bachelorette setzen sich zusammen und analysieren die Aufgabe 3.3. Als Guideline kann das obige Programm dienen. Der Profi ist Coach und hilft bei Unklarheiten.  
 + 
 +**Ziel der Aufgabe**  
 + 
 +Alle Teilnehmer vom EF CG verstehen, wie ein parametrisiertes n-Table realisiert wird und wie die Parameterübergabe bei einer Tastatureingabe funktioniert. 
  • kurse/efcomputergrafik/kw37.1567863463.txt.gz
  • Last modified: 2019/09/07 15:37
  • by Marcel Metzler