;;; little graphics system (require-library "graphics.ss" "graphics") (define-struct ellipse (filled rx ry)) ; filled : boolean ; rx, ry : number ; (make-ellipse filled rx ry) repräsentiert Ellipse um Koordinatenursprung ; mit Halbachsen rx und ry. Falls filled=#t, so ist die Ellipse ausgefüllt. (define-struct polyline (origin points)) ; origin : posn ; points : list(posn) ; (make-polyline p0 (list p1 ... pn)) repräsentiert den Linienzug ; p0 -> p1 -> ... -> pn, wobei die Koordinaten relativ zum Ursprung interpretiert ; werden. (define-struct polygon (filled origin points)) ; filled : boolean ; origin : posn ; points : list(posn) ; (make-polygon filled p0 (list p1 ... pn)) repräsentiert das (geschlossene) ; Polygon p0 -> p1 -> ... -> pn -> p0. Es ist ausgefüllt, falls filled=#t (define-struct above (lower upper)) ; lower, upper : picture ; (make-above pl pu) repräsentiert ein Bild, in dem pu über pl liegt. (define-struct colored (color pic)) ; color : rgb ; pic : picture ; (make-colored color pic) repräsentiert das Bild pic, gezeichnet in der Farbe color. ; falls darunterliegende Teile explizit gefärbt sind, so wird das respektiert. (define-struct translate (delta pic)) ; delta : posn ; pic : picture ; (make-translate delta pic) repräsentiert das Bild pic, nachdem ; dessen Ursprung um delta verschoben ist. (define-struct rotate (phi pic)) ; phi : number ; pic : picture ; (make-rotate phi pic) repräsentiert das Bild pic, nachdem es um den ; Winkel phi (im Bogenmass) gedreht ist. (define-struct scale (scale pic)) ; scale : posn ; pic : picture ; (make-scale scale pic) repräsentiert das Bild pic, nachdem es mit ; scale skaliert worden ist. ; Ein "picture" ist entweder ; ellipse, polyline, polygon, above, colored, translate, rotate oder ; scale. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Als Hilfsmittel (define-struct circle (origin radius)) ; origin : posn ; radius : number ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; SIGNATUR ; render : picture string number number ; ERKLÄRUNG ; ... ; DEFINITION (define render (lambda (pic title width height) (open-graphics) (let* ((width (max 100 width)) (height (max 100 height)) (trans-pic (make-translate (make-posn (/ width 2) (/ height 2)) (make-scale (make-posn 1 -1) (make-colored (make-rgb 0 0 0) pic)))) (v (open-viewport title width height))) (let yloop ((y 0)) (if (< y height) (let xloop ((x 0)) (if (>= x width) (yloop (+ y 1)) (let ((c (pixel-color trans-pic (make-circle (make-posn x y) (/ (sqrt 2) 2))))) (if c ((draw-pixel v) (make-posn x y) c)) ;(display (list x y))(newline) (xloop (+ x 1))))))) (get-mouse-click v) (close-viewport v) (close-graphics))))