(define (script-fu-domain-coloring xsize ysize function x-mid x-delta y-mid y-delta grid-delta) (set! img (car (gimp-image-new xsize ysize RGB))) (set! layer-arg (car (gimp-layer-new img xsize ysize RGBA_IMAGE "Argument" 100 NORMAL))) (set! layer-abs (car (gimp-layer-new img xsize ysize RGBA_IMAGE "Absolute value" 100 OVERLAY))) (set! layer-grid (car (gimp-layer-new img xsize ysize RGBA_IMAGE "Grid" 5 NORMAL))) (gimp-image-undo-disable img) (gimp-image-add-layer img layer-arg 1) (gimp-image-add-layer img layer-abs -1) (gimp-image-add-layer img layer-grid -1) (set! intro (string-append "i=ri:[0,1]; z=ri:(xy:[" (number->string x-mid) "," (number->string y-mid) "]+xy:[" (number->string x-delta) "," (number->string y-delta) "]*xy/XY); " function ";")) ; interactive=0, non=1 (plug-in-mathmap 1 img layer-arg 2 0 0.0 (string-append intro "gradient(pmod(arg(f)/2/pi,1))")) (plug-in-mathmap 1 img layer-abs 2 0 0.0 (string-append intro "grayColor(pmod(log(abs(f))/log(2),1))")) (plug-in-mathmap 1 img layer-grid 0 0 0.0 (string-append intro "tmp=xy:f/" (number->string grid-delta) "; if (floor(pmod(tmp[0],2))+floor(pmod(tmp[1],2)))%2 then grayColor(1) else grayColor(0) end")) (plug-in-edge 1 img layer-grid 10 0) (plug-in-vinvert 1 img layer-grid) (gimp-image-undo-enable img) (gimp-displays-flush) (gimp-display-new img)) (script-fu-register "script-fu-domain-coloring" "/Xtns/Script-Fu/MathMap/Domain Coloring" "Domain coloring of complex-valued functions" "Hans Lundmark" "Hans Lundmark" "2000" "" SF-VALUE "xsize" "256" SF-VALUE "ysize" "256" SF-STRING "function" "f=sin(z*z*z-1)/z" SF-VALUE "x-mid" "0.0" SF-VALUE "x-delta" "2.0" SF-VALUE "y-mid" "0.0" SF-VALUE "y-delta" "2.0" SF-VALUE "grid-delta" "1.0")