# Using the Functional Graphics Library with Chez Scheme

The `fungraph.scm` library provides the procedures for producing graphical images described in Concrete Abstractions. Because these procedures operate like mathematical functions, we refer to them as functional graphics, hence the name `fungraph`.

In addition to the procedures described in the textbook, there are two additional ones:

`(mirror-image `image`)`
Like `quarter-turn-right` or `invert`, this takes an image and makes another, related image. In the case of `mirror-image`, the new image is the same size as the original, and is formed by flipping the original image around a vertical axis, as though it were viewed in a mirror.
`(resize-image `image` `width` `height`)`
This makes a new image similar to the original, but stretched or shrunk as necessary to have the specified width and height. This may also imply a change in the image's proportions. The width and height must both be exact, positive integers.
`(resize-image `image` `size`)`
This is a shorthand, equivalent to `(resize-image `image` `size` `size`)`, i.e., the specified size is used as both the width and the height of the new image.
`(resize-image` image`)`
This is a further shorthand, equivalent to `(resize-image `image` default-image-size default-image-size)`, i.e., the width and height are both taken as the value of `default-image-size`. As described below, this is the same name that controls the size of the images created by `line` and `filled-triangle`.

The images produced by `line` and `filled-triangle` are of a size determined by the value of the name `default-image-size`. Initially this name is defined as 100. This is a compromise size, a bit small for the fractals in chapter 4 and rather large for each basic block of the quilts in chapters 1-3. You can redefine it to another value (which must be an exact, positive integer) to suit your own needs. Or, you can use the `resize-image` procedure described above. For example, when defining the basic blocks for quilting, it may make sense to do so as in the following example:

```(define test-bb
(resize-image
(filled-triangle 0 1 0 -1 1 -1)
25))
```

The images produced by the procedures in this library show up in separate windows, with numbered titles, like Img1, Img2. The title is also shown in the read-eval-print-loop's window, where the value normally would go. That way you can keep track of which image was generated by each evaluation.

For more information, see the parent web page, or contact Max Hailperin:
Email: max@gustavus.edu
Mathematics and Computer Science Department