kurse:efcomputergrafik:kw36

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:kw36 [2019/09/04 14:15]
Marcel Metzler [Callbacks]
kurse:efcomputergrafik:kw36 [2019/09/04 15:14] (current)
Marcel Metzler [Callbacks]
Line 182: Line 182:
            mouseReleased = onMouseReleased)            mouseReleased = onMouseReleased)
 </code> </code>
-//mousePressed// und //mouseReleased// sind dabei die Ereignisse, //onMousePressed// und //onMouseReleased// sind die Namen der Unterprogramme die beim Eintreten des Ereignisses ausgeführt werden sollen. +//mousePressed// und //mouseReleased// sind dabei die Ereignisse, //onMousePressed// und //onMouseReleased// sind die Namen der Unterprogramme die beim Eintreten des Ereignisses ausgeführt werden sollen. Eine Liste der Ereignisse findet ihr in der [[http://www.tigerjython.ch/index.php?inhalt_links=navigation.inc.php&inhalt_mitte=grafik/gpaneldoc.html|Dokumentation]] von Tigerjython. 
 + 
 +**Aufgabe 4** 
 +  - Studiere das nachfolgende Programm 
 +  - Was macht das Programm? Bist du dir nicht sicher, so lade es herunter und probiere es aus. 
 + 
 +<code python Callback> 
 +from gpanel import * 
 + 
 +def onMousePressed(x,y): 
 +    clear() 
 +    move(x,y) 
 +    text("Eine Mausetaste wurde gedrückt"
 + 
 +def onMouseReleased(x,y): 
 +    clear() 
 +    move(x,y) 
 +    text("Die Mausetaste wurde wieder losgelassen"
 + 
 +def onMouseDragged(x,y): 
 +    clear() 
 +    move(x,y) 
 +    text("Die Mause bewegt sich (ev.) mit gedrückter Taste"
 +        
 +makeGPanel(mousePressed = onMousePressed,  
 +           mouseReleased = onMouseReleased, 
 +           mouseDragged = onMouseDragged) 
 +</code> 
 + 
 +**Aufgabe 5** 
 +  - Ergänze dein Mandelbrot Programm so, dass du mit der Mause einen Zoombereich festlegen kannst. In einer ersten Version musst du den Zoombereich nicht mit einem Rechteck oder Quadrat anzeigen. 
 +  - Ergänze deine erste Version Mandelbrot mit Zoom so, dass der Zoobereich mit einem farbigen Rechteck oder Quadrat angezeigt wird. Benutze dabei die Idee aus Tigerjython bei den Gummibandlinien. 
 + 
 +Hier eine mögliche Lösung. 
 +<code python Mandelbrot-Zoom> 
 +from gpanel import * 
 + 
 +def onMousePressed(x, y): 
 +    global xmin, ymin 
 +    storeGraphics() 
 +    xmin=x 
 +    ymin=y 
 + 
 +def onMouseReleased(x, y): 
 +    global xmax,ymax 
 +    global neuesBild 
 +    xmax=x 
 +    ymax=ymin+(xmax-xmin) 
 +    neuesBild=0 
 + 
 +def onMouseDragged(x, y): 
 +    global xmin,ymin 
 +    delta=x-xmin 
 +    recallGraphics() 
 +    move(xmin,ymin) 
 +    setColor("white"
 +    line(xmin, ymin, xmin+delta, ymin) 
 +    line(xmin+delta, ymin, xmin+delta, ymin+delta) 
 +    line(xmin+delta, ymin+delta, xmin, ymin+delta) 
 +    line(xmin, ymin+delta, xmin, ymin) 
 +     
 +def getIterationColor(it): 
 +    color = makeColor((it**2) % 256,  
 +                      (3*it) % 256,  
 +                      (5*it) % 256) 
 +    return color 
 +     
 +def Mandelbrot(c): 
 +    z=0 
 +    it=0 
 +    while it<maxIterations and abs(z)<R : 
 +        z = z**2 + c      
 +        it=it+1           
 +        if abs(z) > R:   
 +            return it 
 +    return maxIterations 
 + 
 +def drawP(): 
 +    global xmin, xmax, xstep, xSize 
 +    global ymin, ymax, ystep, ySize 
 +    xstep=(xmax-xmin)/xSize 
 +    ystep=(ymax-ymin)/ySize 
 +    makeGPanel(Size(xSize,ySize), 
 +        mousePressed = onMousePressed,  
 +        mouseReleased = onMouseReleased, 
 +        mouseDragged = onMouseDragged) 
 +    window(xmin, xmax, ymin, ymax) 
 +    y = ymin 
 +    while y <= ymax: 
 +        x = xmin 
 +        while x <= xmax: 
 +            c = complex(x,y) 
 +            itCount = Mandelbrot(c) 
 +            if itCount == maxIterations: 
 +                setColor("black"
 +            else: 
 +               setColor(getIterationColor(itCount)) 
 +            point(c) 
 +            x += xstep 
 +        repaint() 
 +        y += ystep     
 +#--------------------------------------- 
 +# Hauptprogramm 
 +#--------------------------------------- 
 +R = 2 
 +maxIterations = 100 
 +xmin = -2 
 +xmax = 1 
 +ymin = -1.5 
 +ymax = 1.5 
 +xSize=600 
 +ySize=600 
 +neuesBild=0 
 +key = 0 
 +while key!=27: 
 +    if neuesBild==0: 
 +        drawP(); 
 +        neuesBild=1 
 +    key = getKeyCode() 
 +</code>
  • kurse/efcomputergrafik/kw36.1567599355.txt.gz
  • Last modified: 2019/09/04 14:15
  • by Marcel Metzler