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 15:08]
Marcel Metzler [Callbacks]
kurse:efcomputergrafik:kw36 [2019/09/04 15:14] (current)
Marcel Metzler [Callbacks]
Line 194: Line 194:
     clear()     clear()
     move(x,y)     move(x,y)
-    text("Die Mouse wurde gedrückt")+    text("Eine Mausetaste wurde gedrückt")
  
 def onMouseReleased(x,y): def onMouseReleased(x,y):
     clear()     clear()
     move(x,y)     move(x,y)
-    text("Die Mousetaste wurde losgelassen")+    text("Die Mausetaste wurde wieder losgelassen")
  
 def onMouseDragged(x,y): def onMouseDragged(x,y):
     clear()     clear()
     move(x,y)     move(x,y)
-    text("Die Mouse bewegt sich")+    text("Die Mause bewegt sich (ev.) mit gedrückter Taste")
                
 makeGPanel(mousePressed = onMousePressed,  makeGPanel(mousePressed = onMousePressed, 
Line 214: Line 214:
   - 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 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.   - 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.1567602525.txt.gz
  • Last modified: 2019/09/04 15:08
  • by Marcel Metzler