Graphics in Scmutils We provide low-level support for plotting graphs and making simple drawings. One can make a window, draw lines and points in the window, clear the window and close it. A window is a data object that is made with the procedure frame. So, for example, one may make a window and give it the name win1 as follows: (define win1 (frame 0 7 -2 2)) The window so constructed will have horizontal coordinates that range from 0 (inclusive) to 7 (exclusive) and vertical coordinates that range from -2 (inclusive) to 2 (exclusive). Execution of the frame procedure will construct the window and put it up on your screen. However, you must give it a name so that you can refer to the window to draw in it. Given such a window, you can use it to plot a function: (plot-function win1 sin 0 7 .01) This will plot in the window win1 the curve described by (sin theta), in the interval from theta=0 to theta=7, sampling at intervals of delta-theta=.01. The general pattern is (plot-function ) where takes one numerical argument and produces a numerical value. We can overlay other plots in the same window: (plot-function win1 cos 0 7 .01) If we want, we can clear the window: (graphics-clear win1) And we can make the window go away: (graphics-close win1) After a window is closed it is no longer useful for plotting so it is necessary to make a new one using frame if you want to plot further. There are other useful procedures for plotting. (plot-point ) drops a point at the coordinates (x, y) in the window. (plot-line ) draws a line segment from (x0, y0) to (x1, y1) in the window. (plot-parametric ) draws a parametric curve. The must implement a function of one real argument (the parameter) and must return the cons pair of two numbers, the x and the y value for the given value of the parameter. One can use the pointing device (mouse) to indicate a position. The procedure to interrogate the pointing device is: (get-pointer-coordinates ) where is a procedure that is called when the pointing device is positioned and a button is pressed. The continuation takes 3 arguments, the x-coordinate of the hit, the y-coordinate of the hit, and a designator of which mouse button was pressed. For example: (get-pointer-coordinates win1 list) ;Value: (.16791979949874686 .5037593984962406 0) The value returned indicates that the left mouse button was pressed when the pointer was placed at the coordinates .1679... .5037... The frame procedure takes a large number of optional arguments, allowing one to tailor a window to particular specifications. The default values shown below are for the X window system used with Unix. (frame xmin ;minimum x coordinate. 0.0 xmax ;maximum x coordinate. 1.0 ymin ;minimum y coordinate. 0.0 ymax ;maximum y coordinate. 1.0 frame-width ;width of window 400 pixels frame-height ;height of window 400 pixels frame-x ;horizontal screen position 750 pixels ; of left edge of window. frame-y ;vertical screen position 0 pixels ; of top edge of window )