Functional Problem Solving (CSC 151 2014S) : EBoards

CSC151.02 2014S, Class 22: Images as Functions from Position to Colors


Overview

Preliminaries

Upcoming Work

Admin

Questions on the Homework

What should our solution to problem 3 look like?

;;; Procedure:
;;;   dwelling
;;; Parameters:
;;;   width, a positive integer
;;;   height, a positive integer
;;; Purpose:
;;;   ...
(define dwelling
  (lambda (width height)
    (let ([scene (image-new width height)])
      ; Standard instructions
      (context-set-fgcolor (irgb 128 64 196))
      (image-select ellipse! scene REPLACE 10 10 (- width 20) 20)
      (image-fill! scene)
      ...
      ; The required two-way decision
      (if (< width 100)
          ...
          ...)
      ; The required three-way decision
      (cond
        ([(< width height)
          ...]
         [(> width height)
          ...]
         [else
          ...]))
      ; The required one-way decision
      (when (= width 42)
        (image-show-text! scene "You got the answer!"))

      scene))))

What do you want for the three examples?

Code. We'll run the code.

Models of images

Iterating over positions: Images as functions from position to color

Examples

A simple color blend

> (image-show (image-compute (lambda (x y)
                               (irgb x 0 (- 256 x)))
                             256 256))

Something a bit more geometric

> (image-show (image-compute (lambda (x y)
                               (if (< x y)
                                   (irgb 255 0 0)
                                   (irgb 0 0 0)))
                             256 256))

Something very strange. Yay irgb!

> (image-show (image-compute (lambda (x y)
                               (* 100 x y))
                             256 256))

Something equally strange.

> (image-show (image-compute (lambda (x y)
                               (* 2 x y))
                             256 256))

Questions

Lab


Samuel A. Rebelsky, rebelsky@grinnell.edu

Copyright (c) 2007-2014 Janet Davis, Samuel A. Rebelsky, and Jerod Weinman. (Selected materials are copyright by John David Stone or Henry Walker and are used with permission.)

Creative Commons License

This work is licensed under a Creative Commons Attribution 3.0 Unported License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc/3.0/ or send a letter to Creative Commons, 543 Howard Street, 5th Floor, San Francisco, California, 94105, USA.