From 96c717473a70fb76ced7ed7fdaadfc97fc246e4b Mon Sep 17 00:00:00 2001 From: Robby Findler Date: Thu, 14 Jan 2010 01:15:31 +0000 Subject: [PATCH] revised the coordinates for place-image and fixed up the docs a bit svn: r17643 --- collects/2htdp/image.ss | 2 + collects/2htdp/private/image-more.ss | 27 ++- collects/2htdp/tests/test-image.ss | 85 +++++++-- .../teachpack/2htdp/scribblings/image-toc.ss | 170 +++++++++++++++--- .../teachpack/2htdp/scribblings/image.scrbl | 110 ++++++++++-- .../2htdp/scribblings/img/1132401ea93.png | Bin 0 -> 1798 bytes .../2htdp/scribblings/img/12472655f6c.png | Bin 1207 -> 0 bytes .../2htdp/scribblings/img/126418b230e.png | Bin 0 -> 403 bytes .../2htdp/scribblings/img/12b0447b10c.png | Bin 0 -> 460 bytes .../2htdp/scribblings/img/13121248a3c.png | Bin 1813 -> 0 bytes .../2htdp/scribblings/img/13e518b230e.png | Bin 0 -> 476 bytes .../2htdp/scribblings/img/14ecb83eb01.png | Bin 0 -> 1249 bytes .../2htdp/scribblings/img/1532990d5cb.png | Bin 0 -> 2207 bytes .../2htdp/scribblings/img/1f5944ec1ed.png | Bin 0 -> 292 bytes .../2htdp/scribblings/img/2353974cf1b.png | Bin 0 -> 2726 bytes .../2htdp/scribblings/img/25dd3e2d97c.png | Bin 0 -> 935 bytes .../2htdp/scribblings/img/2751bdfe579.png | Bin 0 -> 1798 bytes .../2htdp/scribblings/img/2a1f3988f.png | Bin 0 -> 1238 bytes .../2htdp/scribblings/img/2b944b7ab91.png | Bin 0 -> 1252 bytes .../2htdp/scribblings/img/353ed4578.png | Bin 0 -> 1238 bytes .../2htdp/scribblings/img/6efa12ea15.png | Bin 0 -> 1311 bytes .../2htdp/scribblings/img/ab1841ea36.png | Bin 0 -> 401 bytes .../2htdp/scribblings/img/df251e846.png | Bin 1340 -> 0 bytes .../2htdp/scribblings/img/fa1a9f17b6.png | Bin 0 -> 1311 bytes 24 files changed, 334 insertions(+), 60 deletions(-) create mode 100644 collects/teachpack/2htdp/scribblings/img/1132401ea93.png delete mode 100644 collects/teachpack/2htdp/scribblings/img/12472655f6c.png create mode 100644 collects/teachpack/2htdp/scribblings/img/126418b230e.png create mode 100644 collects/teachpack/2htdp/scribblings/img/12b0447b10c.png delete mode 100644 collects/teachpack/2htdp/scribblings/img/13121248a3c.png create mode 100644 collects/teachpack/2htdp/scribblings/img/13e518b230e.png create mode 100644 collects/teachpack/2htdp/scribblings/img/14ecb83eb01.png create mode 100644 collects/teachpack/2htdp/scribblings/img/1532990d5cb.png create mode 100644 collects/teachpack/2htdp/scribblings/img/1f5944ec1ed.png create mode 100644 collects/teachpack/2htdp/scribblings/img/2353974cf1b.png create mode 100644 collects/teachpack/2htdp/scribblings/img/25dd3e2d97c.png create mode 100644 collects/teachpack/2htdp/scribblings/img/2751bdfe579.png create mode 100644 collects/teachpack/2htdp/scribblings/img/2a1f3988f.png create mode 100644 collects/teachpack/2htdp/scribblings/img/2b944b7ab91.png create mode 100644 collects/teachpack/2htdp/scribblings/img/353ed4578.png create mode 100644 collects/teachpack/2htdp/scribblings/img/6efa12ea15.png create mode 100644 collects/teachpack/2htdp/scribblings/img/ab1841ea36.png delete mode 100644 collects/teachpack/2htdp/scribblings/img/df251e846.png create mode 100644 collects/teachpack/2htdp/scribblings/img/fa1a9f17b6.png diff --git a/collects/2htdp/image.ss b/collects/2htdp/image.ss index 022b1f160c..6475cb8716 100644 --- a/collects/2htdp/image.ss +++ b/collects/2htdp/image.ss @@ -88,6 +88,8 @@ and they all have good sample contracts. (It is amazing what we can do with kids line add-line add-curve + scene+line + scene+curve text text/font bitmap diff --git a/collects/2htdp/private/image-more.ss b/collects/2htdp/private/image-more.ss index 2ee20d620d..9ce702be76 100644 --- a/collects/2htdp/private/image-more.ss +++ b/collects/2htdp/private/image-more.ss @@ -290,7 +290,7 @@ ;; place-image : image x y scene -> scene (define/chk (place-image image1 x1 y1 image2) - (place-image/internal image1 x1 y1 image2 'left 'top)) + (place-image/internal image1 x1 y1 image2 'middle 'middle)) (define/chk (place-image/align image1 x1 y1 x-place y-place image2) (place-image/internal image1 x1 y1 image2 x-place y-place)) @@ -309,6 +309,28 @@ (if (< dx 0) (- dx) 0) (if (< dy 0) (- dy) 0))))) +(define/chk (scene+line image x1 y1 x2 y2 color) + (let* ([dx (abs (min 0 x1 x2))] + [dy (abs (min 0 y1 y2))]) + (make-image (make-overlay + (make-crop (rectangle-points (get-right image) (get-bottom image)) + (make-line-segment (make-point x1 y1) (make-point x2 y2) color)) + (image-shape image)) + (image-bb image) + #f))) + +(define/chk (scene+curve image x1 y1 angle1 pull1 x2 y2 angle2 pull2 color) + (let* ([dx (abs (min 0 x1 x2))] + [dy (abs (min 0 y1 y2))]) + (make-image (make-overlay + (make-crop (rectangle-points (get-right image) (get-bottom image)) + (make-curve-segment (make-point x1 y1) angle1 pull1 + (make-point x2 y2) angle2 pull2 + color)) + (image-shape image)) + (image-bb image) + #f))) + ;; frame : image -> image ;; draws a black frame around a image where the bounding box is ;; (useful for debugging images) @@ -931,7 +953,8 @@ line add-line add-curve - + scene+line + scene+curve text text/font diff --git a/collects/2htdp/tests/test-image.ss b/collects/2htdp/tests/test-image.ss index 378fa0199c..147abbe5f2 100644 --- a/collects/2htdp/tests/test-image.ss +++ b/collects/2htdp/tests/test-image.ss @@ -987,6 +987,35 @@ => (+ bl 10))) +(test (scene+line (rectangle 100 100 'solid 'black) + 10 10 + 90 50 + "red") + => + (add-line (rectangle 100 100 'solid 'black) + 10 10 + 90 50 + "red")) + +(test (image-width (scene+line (rectangle 100 100 'solid 'black) + -10 -20 + 110 120 + "green")) + => + 100) +(test (image-height (scene+line (rectangle 100 100 'solid 'black) + -10 -20 + 110 120 + 'purple)) + => + 100) +(test (image-baseline (scene+line (rectangle 100 100 'solid 'black) + -10 -20 + 110 120 + 'olive)) + => + 100) + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; ;; curves @@ -1033,6 +1062,27 @@ (rectangle 100 100 'solid 'black) 20 80 90 1/3 80 20 90 1/3 'white)) +(test (add-curve (rectangle 100 100 'solid 'black) + 10 10 0 1/4 + 90 90 0 1/4 + 'white) + => + (scene+curve (rectangle 100 100 'solid 'black) + 10 10 0 1/4 + 90 90 0 1/4 + 'white)) +(test (scene+curve (rectangle 100 100 'solid 'black) + 10 10 0 1/4 + 110 110 0 1/4 + 'red) + + => + (crop 0 0 100 100 + (add-curve (rectangle 100 100 'solid 'black) + 10 10 0 1/4 + 110 110 0 1/4 + 'red))) + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; ;; bitmap tests @@ -1195,39 +1245,44 @@ (rectangle 10 10 'solid 'black) (rectangle 10 10 'solid 'green))) -(test (place-image (circle 4 'solid 'black) - 10 10 - (rectangle 40 40 'solid 'orange)) +(test (place-image/align (circle 4 'solid 'black) + 10 10 + 'left 'top + (rectangle 40 40 'solid 'orange)) => (underlay/xy (rectangle 40 40 'solid 'orange) 10 10 (circle 4 'solid 'black))) -(test (place-image (circle 4 'solid 'black) - 50 50 - (rectangle 40 40 'solid 'orange)) +(test (place-image/align (circle 4 'solid 'black) + 50 50 + 'left 'top + (rectangle 40 40 'solid 'orange)) => (rectangle 40 40 'solid 'orange)) -(test (place-image (circle 4 'solid 'black) - 36 36 - (rectangle 40 40 'solid 'orange)) +(test (place-image/align (circle 4 'solid 'black) + 36 36 + 'left 'top + (rectangle 40 40 'solid 'orange)) => (underlay/xy (rectangle 40 40 'solid 'orange) 36 36 (crop 0 0 4 4 (circle 4 'solid 'black)))) -(test (place-image (circle 8 'solid 'black) - -4 -4 - (rectangle 40 40 'solid 'orange)) +(test (place-image/align (circle 8 'solid 'black) + -4 -4 + 'left 'top + (rectangle 40 40 'solid 'orange)) => (overlay/xy (crop 4 4 16 16 (circle 8 'solid 'black)) 0 0 (rectangle 40 40 'solid 'orange))) -(test (place-image (circle 4 'solid 'black) - -4 0 - (rectangle 40 40 'solid 'orange)) +(test (place-image/align (circle 4 'solid 'black) + -4 0 + 'left 'top + (rectangle 40 40 'solid 'orange)) => (overlay/xy (crop 4 0 4 8 (circle 4 'solid 'black)) 0 0 diff --git a/collects/teachpack/2htdp/scribblings/image-toc.ss b/collects/teachpack/2htdp/scribblings/image-toc.ss index eace9c52d0..3802a8f2ed 100644 --- a/collects/teachpack/2htdp/scribblings/image-toc.ss +++ b/collects/teachpack/2htdp/scribblings/image-toc.ss @@ -8,8 +8,8 @@ (list (list '(image-height (rectangle 100 100 "solid" "black")) 'val 100) (list '(image-baseline (rectangle 100 100 "solid" "black")) 'val 100) - (list '(image-height (text "Hello" 24 "black")) 'val 24) - (list '(image-baseline (text "Hello" 24 "black")) 'val 18) + (list '(image-height (text "Hello" 24 "black")) 'val 41) + (list '(image-baseline (text "Hello" 24 "black")) 'val 31) (list '(image-height (overlay (circle 20 "solid" "orange") (circle 30 "solid" "purple"))) @@ -75,6 +75,90 @@ '(rotate 45 (ellipse 60 20 "solid" "olivedrab")) 'image "28daec71a64.png") + (list + '(scene+curve + (rectangle 100 100 "solid" "black") + -20 + -20 + 0 + 1 + 120 + 120 + 0 + 1 + "red") + 'image + "25dd3e2d97c.png") + (list + '(scene+curve + (add-curve + (rectangle 40 100 "solid" "black") + 20 + 10 + 180 + 1/2 + 20 + 90 + 180 + 1/2 + "white") + 20 + 10 + 0 + 1/2 + 20 + 90 + 0 + 1/2 + "white") + 'image + "1132401ea93.png") + (list + '(scene+curve + (rectangle 100 100 "solid" "black") + 20 + 20 + 0 + 1 + 80 + 80 + 0 + 1 + "white") + 'image + "6efa12ea15.png") + (list + '(scene+curve + (rectangle 100 100 "solid" "black") + 20 + 20 + 0 + 1/3 + 80 + 80 + 0 + 1/3 + "white") + 'image + "353ed4578.png") + (list + '(scene+line (rectangle 40 40 "solid" "gray") -10 50 50 -10 "maroon") + 'image + "1f5944ec1ed.png") + (list + '(scene+line + (ellipse 80 60 "outline" "darkolivegreen") + (+ 40 (* 40 (cos (* pi 1/4)))) + (+ 30 (* 30 (sin (* pi 1/4)))) + (+ 40 (* 40 (cos (* pi 5/4)))) + (+ 30 (* 30 (sin (* pi 5/4)))) + "darkolivegreen") + 'image + "2353974cf1b.png") + (list + '(scene+line (ellipse 40 40 "outline" "maroon") 0 40 40 0 "maroon") + 'image + "2b944b7ab91.png") (list '(beside (place-image/align @@ -127,39 +211,39 @@ (list '(place-image (circle 4 "solid" "white") - 16 18 + 20 (place-image (circle 4 "solid" "white") - -2 - 4 + 0 + 6 (place-image (circle 4 "solid" "white") - 12 - 0 + 14 + 2 (place-image (circle 4 "solid" "white") - 6 - 12 + 8 + 14 (rectangle 24 24 "solid" "goldenrod"))))) 'image - "1178fdd1294.png") + "ab1841ea36.png") (list '(place-image (triangle 64 "solid" "red") - -8 - -8 + 24 + 24 (rectangle 48 48 "solid" "gray")) 'image - "2875b40781.png") + "13e518b230e.png") (list '(place-image (triangle 32 "solid" "red") - 8 - 8 + 24 + 24 (rectangle 48 48 "solid" "gray")) 'image - "2bea495d1f.png") + "126418b230e.png") (list '(above/align "left" @@ -381,10 +465,24 @@ "169f2ceb45c.png") (list '(text "Goodbye" 36 "indigo") 'image "169990a635e.png") (list '(text "Hello" 24 "olive") 'image "1bbeedc0d6.png") + (list + '(add-curve + (rectangle 100 100 "solid" "black") + -20 + -20 + 0 + 1 + 120 + 120 + 0 + 1 + "red") + 'image + "1532990d5cb.png") (list '(add-curve (add-curve - (rectangle 40 100 'solid 'black) + (rectangle 40 100 "solid" "black") 20 10 180 @@ -393,7 +491,7 @@ 90 180 1/2 - 'white) + "white") 20 10 0 @@ -402,27 +500,41 @@ 90 0 1/2 - 'white) + "white") 'image - "13121248a3c.png") - (list - '(add-curve (rectangle 100 100 'solid 'black) 20 20 0 1 80 80 0 1 'white) - 'image - "df251e846.png") + "2751bdfe579.png") (list '(add-curve - (rectangle 100 100 'solid 'black) + (rectangle 100 100 "solid" "black") 20 20 0 - 1/3 + 1 80 80 0 - 1/3 - 'white) + 1 + "white") 'image - "12472655f6c.png") + "fa1a9f17b6.png") + (list + '(add-curve + (rectangle 100 100 "solid" "black") + 20 + 20 + 0 + 1/3 + 80 + 80 + 0 + 1/3 + "white") + 'image + "2a1f3988f.png") + (list + '(add-line (rectangle 40 40 "solid" "gray") -10 50 50 -10 "maroon") + 'image + "12b0447b10c.png") (list '(add-line (ellipse 80 60 "outline" "darkolivegreen") diff --git a/collects/teachpack/2htdp/scribblings/image.scrbl b/collects/teachpack/2htdp/scribblings/image.scrbl index bdbd04ce96..19a75f041b 100644 --- a/collects/teachpack/2htdp/scribblings/image.scrbl +++ b/collects/teachpack/2htdp/scribblings/image.scrbl @@ -200,6 +200,8 @@ other. The top and bottom pair of angles is @scheme[angle] and the left and righ Adds a line to the image @scheme[image], starting from the point (@scheme[x1],@scheme[y1]) and going to the point (@scheme[x2],@scheme[y2]). + Unlike @scheme[scene+line], if the line passes outside of @scheme[image], the image + gets larger to accomodate the line. @image-examples[(add-line (ellipse 40 40 "outline" "maroon") 0 40 40 0 "maroon") @@ -208,7 +210,9 @@ other. The top and bottom pair of angles is @scheme[angle] and the left and righ (+ 30 (* 30 (sin (* pi 1/4)))) (+ 40 (* 40 (cos (* pi 5/4)))) (+ 30 (* 30 (sin (* pi 5/4)))) - "darkolivegreen")] + "darkolivegreen") + (add-line (rectangle 40 40 "solid" "gray") + -10 50 50 -10 "maroon")] } @defproc[(add-curve [image image?] @@ -229,24 +233,34 @@ The @scheme[pull1] and @scheme[pull2] arguments control how long the curve tries to stay with that angle. Larger numbers mean that the curve stays with the angle longer. -@image-examples[(add-curve (rectangle 100 100 'solid 'black) +Unlike @scheme[scene+curve], if the line passes outside of @scheme[image], the image + gets larger to accomodate the curve. + + +@image-examples[(add-curve (rectangle 100 100 "solid" "black") 20 20 0 1/3 80 80 0 1/3 - 'white) - (add-curve (rectangle 100 100 'solid 'black) + "white") + (add-curve (rectangle 100 100 "solid" "black") 20 20 0 1 80 80 0 1 - 'white) + "white") (add-curve (add-curve - (rectangle 40 100 'solid 'black) + (rectangle 40 100 "solid" "black") 20 10 180 1/2 20 90 180 1/2 - 'white) + "white") 20 10 0 1/2 20 90 0 1/2 - 'white)] + "white") + + (add-curve (rectangle 100 100 "solid" "black") + -20 -20 0 1 + 120 120 0 1 + "red")] } + @defproc[(text [string string?] [font-size (and/c integer? (<=/c 1 255))] [color image-color?]) image?]{ @@ -506,26 +520,26 @@ and universes using @scheme[2htdp/universe]. @image-examples[(place-image (triangle 32 "solid" "red") - 8 8 + 24 24 (rectangle 48 48 "solid" "gray")) (place-image (triangle 64 "solid" "red") - -8 -8 + 24 24 (rectangle 48 48 "solid" "gray")) (place-image (circle 4 "solid" "white") - 16 18 + 18 20 (place-image (circle 4 "solid" "white") - -2 4 + 0 6 (place-image (circle 4 "solid" "white") - 12 0 + 14 2 (place-image (circle 4 "solid" "white") - 6 12 + 8 14 (rectangle 24 24 "solid" "goldenrod")))))] } @defproc[(place-image/align [image image?] [x real?] [y real?] [x-place x-place?] [y-place y-place?][scene image?]) @@ -558,6 +572,74 @@ and universes using @scheme[2htdp/universe]. (rectangle 32 32 "outline" "black")))] } +@defproc[(scene+line [image image?] + [x1 real?] [y1 real?] + [x2 real?] [y2 real?] + [color image-color?]) + image?]{ + + Adds a line to the image @scheme[scene], starting from the point (@scheme[x1],@scheme[y1]) + and going to the point (@scheme[x2],@scheme[y2]); unlike + @scheme[add-line], this function crops the resulting image to the size of @scheme[scene]. + + @image-examples[(scene+line (ellipse 40 40 "outline" "maroon") + 0 40 40 0 "maroon") + (scene+line (ellipse 80 60 "outline" "darkolivegreen") + (+ 40 (* 40 (cos (* pi 1/4)))) + (+ 30 (* 30 (sin (* pi 1/4)))) + (+ 40 (* 40 (cos (* pi 5/4)))) + (+ 30 (* 30 (sin (* pi 5/4)))) + "darkolivegreen") + (scene+line (rectangle 40 40 "solid" "gray") + -10 50 50 -10 "maroon")] +} + +@defproc[(scene+curve [scene image?] + [x1 real?] [y1 real?] [angle1 angle?] [pull1 real?] + [x2 real?] [y2 real?] [angle2 angle?] [pull2 real?] + [color image-color?]) + image?]{ + +Adds a curve to @scheme[scene], starting at the point +(@scheme[x1],@scheme[y1]), and ending at the point +(@scheme[x2],@scheme[y2]). + +The @scheme[angle1] and @scheme[angle2] arguments specify the +angle that the curve has as it leaves the initial point and +as it reaches the final point, respectively. + +The @scheme[pull1] and @scheme[pull2] arguments control how +long the curve tries to stay with that angle. Larger numbers +mean that the curve stays with the angle longer. + +Unlike @scheme[add-curve], this function crops the curve, only showing +the parts that fit onto @scheme[scene]. + +@image-examples[(scene+curve (rectangle 100 100 "solid" "black") + 20 20 0 1/3 + 80 80 0 1/3 + "white") + (scene+curve (rectangle 100 100 "solid" "black") + 20 20 0 1 + 80 80 0 1 + "white") + (scene+curve + (add-curve + (rectangle 40 100 "solid" "black") + 20 10 180 1/2 + 20 90 180 1/2 + "white") + 20 10 0 1/2 + 20 90 0 1/2 + "white") + + (scene+curve (rectangle 100 100 "solid" "black") + -20 -20 0 1 + 120 120 0 1 + "red")] +} + + @section{Rotating, Scaling, Cropping, and Framing Images} @defproc[(rotate [angle angle?] [image image?]) image?]{ diff --git a/collects/teachpack/2htdp/scribblings/img/1132401ea93.png b/collects/teachpack/2htdp/scribblings/img/1132401ea93.png new file mode 100644 index 0000000000000000000000000000000000000000..c2850db3dfe6dc2bbc821259045077be50a93789 GIT binary patch literal 1798 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 literal 0 HcmV?d00001 diff --git a/collects/teachpack/2htdp/scribblings/img/12b0447b10c.png b/collects/teachpack/2htdp/scribblings/img/12b0447b10c.png new file mode 100644 index 0000000000000000000000000000000000000000..679eea1bf79687004876f54d197c881d691e7b63 GIT binary patch literal 460 zcmV;-0W5Kd6L!CUO)G>8U0$0r{&Yz>EjKUPm6Lgx_VfY6O!4u z>uBcU-as=8_cogL-8<1V?ruWUvfF{CS+^Taa^QaFi=vQODD|q@y!!aQc)1^*pES*w z+n3dB{`danM#GwWg+9E!bfaO)y+#j?k6MSVxO<^t#N8JS3vLfI)ZKn)=(@epP;`f& zq2&%lL&Y7AhP*op8p7^aXh^yvq9Nvvi-wFlIvN7*6lkP&Cqg5sI~^M7+)2?$+w^uMz>`&o7~3H-08ND=C(TvG&kJ2 zpjmfkgy!0v7n&<~c4(5w5l!;o`geHteAoKl!&?7FVW~oD91$M?0000sFgeaB~ zuKZw9R>mwaaLh%5R@$aZMmt6BdbXh$BJI2%_R=fZ&dxcT1uyg@uL1#YGN>gCGcs zqD4hTN~N;4wl+OI{o=)o-QC^f)e-~|2Nnnf1VOl5uKfIbDvtsHTCJ8Kh|bPV7K`k` z;@Co=(BW_l4h~XOe+8GzB?#iyty|3Pd-v{LzkZ!A91R3PoK9zDWhE0^DwX>Eem$|KBQ=%4{|#V$aRZefjdGpr9aD zLQGpGlet{3L~H=~{{6dHET(N|WMusK@gqSy5{Ym)9NPB${5*mn3EBdIARG?Uw%u;G zR4Pr-Rwxu-zka1{dpsVJuZl{r*=(Uu=ytnl+wb4MS1Of>*rlbVcDsFXagnzD?%g|; zN|lIRR#rAVJWP@h)1I816p2J@)~sP{tJP|9n=E>Jd-v_z$LwANLBip%P$-O*5NBQT z{Q2|R+FE9|Uaub;8w&&i%x(vgqaq@+5Uw zE|+_~-ne4{CA+-5d}?Zny4}{+cJ11=xM`GZ0Qm6X!usAM7t;`jU4u3ein`^b?a zy}i9uG8-BiUc7igC6lVn2%4o0id3 z6f2}*qbM2-2Fd?yZ{EDwy?b}^Z2&MB3>Pk3h*erzTIzH<*=+WT*!lVSKA(@r4I-L(5JRs?9 zR>}r|;o;%g+1bp@OvX0zy*(Vq7Zw)g=H?jJz%UdFMIaC`o6URo?qya3^ESVG_wMD( zmvuUw!{JCtVbXXE?cCg49LJ;Mso89%K5iz#zJ2@ll`B`GpY?jZ-EL>_=uB*>R2mEh zmoD-w7E4`S-Jh^KIy$aiy}I;DRaKSEW+UG{O@fW0Xdn<+zOuDgEW38?T3NfTt?lN` zo6E1))YOcPjjf=aot=&2xJ)MdZRz;Qu4#lMtJ-e!^isH|> zwY8P}sDifL*VotB*hnQaCnqNq3Q?K9QL<$+Ss)OIwH#R}e zolZ9~F_8p2B_-wCw{L}oh16{Tn3$L-D=Uj@#~J%7D=WQT@8skpE!$``GTsdRFFHFr zPn|kN_b#baisLx>(lAb&r=_I@gF%r|g!?M)n`vu0I8B00000NkvXXu0mjf D)NGXA diff --git a/collects/teachpack/2htdp/scribblings/img/13e518b230e.png b/collects/teachpack/2htdp/scribblings/img/13e518b230e.png new file mode 100644 index 0000000000000000000000000000000000000000..9c530e40c9682b52e1054776f8027827a8af5882 GIT binary patch literal 476 zcmV<20VDp2P)9z?VOR^k*f`PQ zo0<1}5Tc?e$iVmQcDUc$ufLbe&-H4V@O(bUmj7?7YMQ<~b83{JbU+?6GNoR8AUzaPW>6QOkS*UhlbL};8gb$!e-|8I_2wyA5ClFEs5 zJ&rd*?8HA8bzcxW@#|OJ7i3P-oa_36z)81mMPCp&>FPt#7r0KA97+2E*U8dvr0Zch z8T&E`&zfLVb7Kp$E`3gx{3AH|^*LGckKn8m zI@$A&n5+lrWY0fhGB@K+bLAi5pMS(@-uxpx=P=?lZ~hUUdhI)f$Ug$*y6+Ss{|L1H zH>YsZdUYJrviV1J^B&W(`A2m3 zC0;)Nh*$kQlEe{x$mfwH&bi3__xAL0&h(Bo5UUf9)rrUI#A9{h@kQ?AI{6>6hA&0< S!uKNp0000>C=_mQZ-EZQViA~L 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 literal 0 HcmV?d00001 diff --git a/collects/teachpack/2htdp/scribblings/img/2b944b7ab91.png b/collects/teachpack/2htdp/scribblings/img/2b944b7ab91.png new file mode 100644 index 0000000000000000000000000000000000000000..38db4626cf12cb3135a3c84c0e143e0fea4dca79 GIT binary patch literal 1252 zcmVYh+-G$n2!mDF?p-N4jI=x!qpXlwUd%kOpMp`M_eL0P zKKlwKx()rLZeU`$XV|SWuqw+KW&3FRb5mFhDw7@ppr0g6_EoJJmn@p@O9&<lYfY zn>AD>En=V6Nrkxe+n2gO1!$AN09@`7_SZE3`QFz?;S40n&02=VtuaYDZrnS3=E1ew zq}LZ#YZ1%uRlRQ!%Mn76ZI8|(eCNXO+n?i-#ch&dAuRUEw(Gn)j$NjT2uHTfV}JJ@ zX0DL5GY;8bsUgY3#LVdd-gips!!`9tS|c4y(>P;0pp++(e_*@Xx;3w)L33%dA2#dY1x(Nm#W|t~6OA8b5 z#Gxc-WhCchIOR*2M{P>WV!>$)3W>Oe72dpcUo0=F}MUlUUNOM8W_7 zS|NMoA3YYc8Z!(4NY2jm+MKc5F~b0WBwDJ^=E5i#7TWbC1_l7EIownx9iwK^eO6~8 zVE_POw576{SPF|lnD9ix008Hln)X~SMlZ^B&S??}0|4+@C8M+uV?4hPmnbq^0j=TPGEXfdK%jTYnV1UIhRE2qEpj zxR}%Vgsamw<5KGQ^=$z^iGuqUNRs^eHn-XoZx|sYYPzZ&7!O`Q+$-w&ljF_b#2eP} z#iOS$g^oMx`}5J$m$dz&_`x2ndEn?-x5gYQS+_lUE4Q{KIPyCVudS>Ooj4a7?Qk0* zWDrdA>p#{HP3~asF$EWtV?;Eo^t9jS{<5DLmD_r|Li{=Zy%}p}TnW9qYIgebtSsn?o@l!AY-A z-r3Vv-DD8_wOJdm5e{ZWr5B!RA8EMwf6wBOB-Ou-^6FZ}oKC`oM`;Nn!Vh~1z@=Y@ z2acW{`{1&1WEKVj(N)5P&v*UKtK-~%x5GN6*zztZs|Ks!Zd literal 0 HcmV?d00001 diff --git a/collects/teachpack/2htdp/scribblings/img/353ed4578.png b/collects/teachpack/2htdp/scribblings/img/353ed4578.png new file mode 100644 index 0000000000000000000000000000000000000000..1750445e01c78089b66f6d1618a1765d6e15c764 GIT binary patch literal 1238 zcmeAS@N?(olHy`uVBq!ia0vp^sUXb31SD_E?V7>Bz%tj<#WAE}&f7b&8oO&{j(_BT zCL~?I#75;jf9|IO2V?$~noCb6_iho^JpHh%=*fYZi)1EFDpF#9)F3m{W93%K+l+0M zQetIld~fYO?7v%H{{R2~Z^_rc?yh_N-KxBH|K8nYTeGM0KCsi3;BmWjuhDRixa7TV zp7*Y8-<1wmPkgxd#D}<)3VkDd!aa|y>uV}2XU>`P=hLU6;^N|pij3{IuV1?+Cok{3 zHAceA!^6Yh|9aNew9S=?iHZUoIeB^8wr_WLak&tu`=#k%LPx)Zu<+%ZH(wT5#OQ?w z2M2fb`$fN~uFc5I+__^%L_~y#mzPj>+Y^^JtPU$f{Cs`q&Ye4T>eNmPH>XG6s?trQ z{?_e3m>^I)>Bo{6tP2(`I`sT=X=$map^uNySEdDFtMl{nqN1Z!XQ}hOtYXyA(%Q9a z*Q#~vrsbuq@Vv#{5Vrd3&zhSzZ%*>#m0elQ_~Px`ySHx(vpBvwxX@vtcmq(Tvy+pn zd4I3p`WrVQmR~;kXzP4GeTJh)k6yoiJu)(~bJt+@7n{@uozmvCp{+u~8eAI4rZ%{TizWn&(k)ua1#yzP&@#qgzL3Q=+ zEn7@XOkAo3%T|PF^&g)+aiU}OMEi+Hzy5QMkH7!tkIh@%e=c!*7cE)@G|6r8!o4T* zPp%ek=F=qw7yT{d;8p+c$6a z?AvE%ZhkqgMfT~_r+&+W+sZwPZ1ywkh*|ge@#A^(Se6|C9B>!-t85g%^`HUI3c+@#Dwk%a>Dl)_{Qu(p`|I=a`o4+T8(z>hGP?A#WZLxUm*ZFx7Kt?@pca>ayN&h1(%F z_wB!b`t@86d$1)Wse zbeFr~U;@zptgNh;dXo2vH@th7H~;+du+^$FMEUkIl$4d-yL_RWlarIv5$l#PXLxw+^<1~b zk#TYR_V1UMl;nIHz6+RdB>r)o+|3~s(s$*GqAj3@O1TaS?83{1OQ>SdHnzY literal 0 HcmV?d00001 diff --git a/collects/teachpack/2htdp/scribblings/img/6efa12ea15.png b/collects/teachpack/2htdp/scribblings/img/6efa12ea15.png new file mode 100644 index 0000000000000000000000000000000000000000..a9b3cfaaa1a7914636b8969f2b2f26867969982a GIT binary patch literal 1311 zcmai!eNfT|7{^JSua(YB+0K|48KtI{f@fL*IzwG5zF;p$%~$N&C8YR-{5 zZ%ed5Up2i*$%3Y5I25;!5p3uV{z$>UtT_zCmyfxRV=GgCzBF_?w#s< z(Vj1FY;8rOd5xnuQQLqagi0+kBvYx>@it^-XWLQ2H!j`-aa7;Btm$NB4qW8jUKUBS z(dF+4g}gmW_Ckdpt?d!NphcxwL{@iJG%9r{5th65Wew-`9|Y#pHqbOqVNgS&ulpeW zbaVeNd9&@#)~^tV%!~{%Nm3FO{BCS!W@dPpu(SERVm?~sRu`=j3WXee+p$o1okE_2 z3A_97qpO(IEEI;Exk{4!b?P(@hojMGMB+J97KxM{3Qr0UjOF5;X}&(r4l;^VG5<7j z(P&?uw4=#ZOUdH#`S*c6=nm;&VYHHxa4eRbnu-JN8(|htbiW!XHspRb@7tMdawSr9BzEnrA)M!i0p^r8B=#OX|-AbWjWU2;gyl> zZx1%E@CwG65g5$k(h?-E1*B6`nL<@OP{VMrThpaU07f<}JZHtljVv#R={Krcg;x4a z7L8WF;<{{lb0#=A7^1Of#Y{bTu+OH&j6a+o9px%@{vaL&T?FMhVYG-iGMM#EL}=&} z^P9^PXg$)ucW7vOa*_ayXxS}RjYi|EAfleM*!D>ky}e;g%7%OSMEB3DWHOmRuz|W2 zgw2`xEh`KR1_LmeL@8s_pm~-WUW-Svq1j_gWK@)aep65Um<+FV;S6VFWI!8Trp#Sp zvCd#HEG%$Wez3v}x}r#LZ}0t5k2(+p+uH-wfwT4tT7_DzRw@(O)?*)hTFqVE-QN`y zIE`aX>rwy+>@&MH>cBmYVls;bYL~Wxb2%x1L}Q5c#{naX))f-kt7tLsw9`dObCTnI z7P!P#^Yae!NAUklU)kP6XA_aRoXoD6-Ma-!9mM4{Zq#H2JzHkHpzqcr=TZ+JHd<|( z;}Lq~NjvN7VSPzYPfsPd{gx#go=>OKp}n1*+?7T$+gRiAV}dv>EiFh%FDvk-RDV!v{bT7QN5b}eQ zC#79oeTTa9`wm{2xE92O9*xBcj=r7UOAQB#i_NR63?`HBk%01?K9RXv8X^3kzWl;c zQBzaX-`@|tRn(;(ne0f%WMTgykRqL+ibxWZI<`AA5#`yCuyH+SFN+{|z8{hT11r4T k{>Li*Z7hU}fD1ZozIkrLwOcW7A>)G);||33;Ez@Q4J`SeLjV8( literal 0 HcmV?d00001 diff --git a/collects/teachpack/2htdp/scribblings/img/ab1841ea36.png b/collects/teachpack/2htdp/scribblings/img/ab1841ea36.png new file mode 100644 index 0000000000000000000000000000000000000000..fa58a6e213d6d92344034d4184d932788ae500e1 GIT binary patch literal 401 zcmV;C0dD?@P)P000>X0ssI2ON$aT00044Nkln`iImW4|KQ~KNUBiIBFVmAv)vGI!<)nQ7%z1aQl*GFWLzrQ}bKG%ZJ zECw8*@axmvhub{AJlg*6_m_XaKYw|&?a?;RKi^(pHH!tSC^Go-?Kx(w5pWl-P#_*a z&B7B3!~>RpzdwI_e)#pdW?Z2_f?0Q0>!I+uBt?yDxg_iu7#P02IP&&l_peWPi8Tw& zAUUsX%xnS>E|07`m$=2lZ5~8A86^*i8rQ-Nf=c5^cZAI%DfbaDi$Z{67D>4e6QG3s z+l$>?;ucJ7{BRMpbca8dQQU<;_d#NrN7j>xl^bj6f}S7oWn6vt81oZxgc)B_~KQLykWErvxjl|q@B?zA+wneSR@CnDb-G3R^eOr1KU zS6NzTkuuAdD3P?Ol?xT&kl~UNU!EFf37LkrXZ^LmcJ{~b{?57Qd+xdC-p~E=!o!%h zHfS3d3}zb=%=jAmlm2nA43H}kQBuZNQ`37tumg32P# zapGsoc?2fGU-0~Q-fceCpIyG-P5teD!D)+U_X}_luCk*F_sTSNLuPs^Vrs=XwCnxA zqopG5)5tvM^>W?xIGwLQTWW8Vy{6%UfTFu2G1;l!w01}5CvZD`N!i=JpxkFd>B4`e zpNqL1CX<e6_eNm&>Dm-btrtO1>kJ zNRV=}V{LZJq198RaZW@cu{5sX-Mj2x_oFcwQMh{@t2s~@%wj2ybf7DV+qS7ETaq;m4duxQ99lx&5-r3;wMtZ7tXgWPTy{xRv&(AOU zroeE%%j^Zp&7tDk=xF)yutuXvh`+n4w^EZ?SI1heUq>Ji)y{8_BQe%^9;0uOo1ec6 z#OD`i;P|@gYVFDG`Kv3tf%|?VQv1O1@$rBx#k0+)l<7Zrs4RL85x#3B=N@&e7IH73Ca173O6K=P-6|E%zJ%8saS^! z*~v@ucdWIv+<;g0wY5{nslnoGD`{jz#OT0)6^QC?)YRmWanid5TueFK4#<5cV! zs0{`Asl^=a$kwx8y1-r>Qy=|7o^bdus8AqHcfJn?4th9T9SZ^a2OAB(=N{etK;07n zHjk!q={OLDD^idtl(#c8&@QS1z>M5n3=X&NqxMZU4FtiaNG^gU*6Y)?`wqlyL086z z9oH7WQEXWA*|9^TR5F16+*spgFR$c-lues>hU)x66&$bBXkMO>zF;a|qH(Jd4w1R$k*dhQjeh$NC||K@s@ z8-Hl}gd~($%W7t`*+?G4!(qu_fI!ZhU;l}A#nPs6X-9G4|FV>S8PL6vTt(EHMM?9@ VI$yu-W{@kwLUxBSS_5MX{|1g)oKOG& diff --git a/collects/teachpack/2htdp/scribblings/img/fa1a9f17b6.png b/collects/teachpack/2htdp/scribblings/img/fa1a9f17b6.png new file mode 100644 index 0000000000000000000000000000000000000000..a9b3cfaaa1a7914636b8969f2b2f26867969982a GIT binary patch literal 1311 zcmai!eNfT|7{^JSua(YB+0K|48KtI{f@fL*IzwG5zF;p$%~$N&C8YR-{5 zZ%ed5Up2i*$%3Y5I25;!5p3uV{z$>UtT_zCmyfxRV=GgCzBF_?w#s< z(Vj1FY;8rOd5xnuQQLqagi0+kBvYx>@it^-XWLQ2H!j`-aa7;Btm$NB4qW8jUKUBS z(dF+4g}gmW_Ckdpt?d!NphcxwL{@iJG%9r{5th65Wew-`9|Y#pHqbOqVNgS&ulpeW zbaVeNd9&@#)~^tV%!~{%Nm3FO{BCS!W@dPpu(SERVm?~sRu`=j3WXee+p$o1okE_2 z3A_97qpO(IEEI;Exk{4!b?P(@hojMGMB+J97KxM{3Qr0UjOF5;X}&(r4l;^VG5<7j z(P&?uw4=#ZOUdH#`S*c6=nm;&VYHHxa4eRbnu-JN8(|htbiW!XHspRb@7tMdawSr9BzEnrA)M!i0p^r8B=#OX|-AbWjWU2;gyl> zZx1%E@CwG65g5$k(h?-E1*B6`nL<@OP{VMrThpaU07f<}JZHtljVv#R={Krcg;x4a z7L8WF;<{{lb0#=A7^1Of#Y{bTu+OH&j6a+o9px%@{vaL&T?FMhVYG-iGMM#EL}=&} z^P9^PXg$)ucW7vOa*_ayXxS}RjYi|EAfleM*!D>ky}e;g%7%OSMEB3DWHOmRuz|W2 zgw2`xEh`KR1_LmeL@8s_pm~-WUW-Svq1j_gWK@)aep65Um<+FV;S6VFWI!8Trp#Sp zvCd#HEG%$Wez3v}x}r#LZ}0t5k2(+p+uH-wfwT4tT7_DzRw@(O)?*)hTFqVE-QN`y zIE`aX>rwy+>@&MH>cBmYVls;bYL~Wxb2%x1L}Q5c#{naX))f-kt7tLsw9`dObCTnI z7P!P#^Yae!NAUklU)kP6XA_aRoXoD6-Ma-!9mM4{Zq#H2JzHkHpzqcr=TZ+JHd<|( z;}Lq~NjvN7VSPzYPfsPd{gx#go=>OKp}n1*+?7T$+gRiAV}dv>EiFh%FDvk-RDV!v{bT7QN5b}eQ zC#79oeTTa9`wm{2xE92O9*xBcj=r7UOAQB#i_NR63?`HBk%01?K9RXv8X^3kzWl;c zQBzaX-`@|tRn(;(ne0f%WMTgykRqL+ibxWZI<`AA5#`yCuyH+SFN+{|z8{hT11r4T k{>Li*Z7hU}fD1ZozIkrLwOcW7A>)G);||33;Ez@Q4J`SeLjV8( literal 0 HcmV?d00001