Use modularity / up to Exercise 1-12
[goproglang.git] / lissajous / lissajous.go
index 8e3e5c9f2799dbe84e5cbe33fd213b01b1c2ca9f..e43a51a9651896c858ebabff54f40abfbeceb136 100644 (file)
@@ -1,57 +1,59 @@
-package main
+package lissajous
 
 import (
-  // "fmt"
-  "image"
-  "image/color"
-  "image/gif"
-  "io"
-  "math"
-  "math/rand"
-  "os"
-  "time"
+       // "fmt"
+       "image"
+       "image/color"
+       "image/gif"
+       "io"
+       "math"
+       "math/rand"
+       "net/http"
+       // "os"
+       "time"
 )
 
-var palette = []color.Color{color.RGBA{0x00,0x16,0x00,0xff}, color.Black, color.White}
+var palette = []color.Color{color.RGBA{0x00, 0x16, 0x00, 0xff}, color.Black, color.White}
 
 const (
-  whiteIndex = 2
-  blackIndex = 1
-  greenIndex = 0
+       whiteIndex = 2
+       blackIndex = 1
+       greenIndex = 0
 )
-func main() {
-  rand.Seed(time.Now().UnixNano())
-  paletteIndex := uint8 (rand.Intn(2))
-  // fmt.Println("paletteIndex: ", paletteIndex)
-  lissajous(os.Stdout, paletteIndex)
+
+func Run(w http.ResponseWriter, c int) {
+       rand.Seed(time.Now().UnixNano())
+       paletteIndex := uint8(rand.Intn(2))
+       // fmt.Println("paletteIndex: ", paletteIndex)
+       lissajous(w, c, paletteIndex)
 }
-func lissajous(out io.Writer, paletteIndex uint8) {
-  const (
-    cycles = 5
-    res = 0.001
-    size = 100
-    nframes = 64
-    delay = 8
-  )
-  freq := rand.Float64() * 3.0
-  anim := gif.GIF{LoopCount: nframes}
-  phase := 0.0
-  for i := 0; i < nframes; i++ {
-    rect := image.Rect(0, 0, 2*size+1, 2*size+1)
-    img := image.NewPaletted(rect, palette)
-    for t:= 0.0; t < cycles*2*math.Pi; t += res {
-      x := math.Sin(t)
-      y := math.Sin(t*freq + phase)
-      img.SetColorIndex(size+int(x*size+0.5), size+int(y*size+0.5), paletteIndex)
-    }
-    phase += 1
-    anim.Delay = append(anim.Delay, delay)
-    anim.Image = append(anim.Image, img)
-  }
-  gif.EncodeAll(out, &anim)
+func lissajous(out io.Writer, c int, paletteIndex uint8) {
+  cycles := float64(c)
+       const (
+               res     = 0.001
+               size    = 100
+               nframes = 64
+               delay   = 8
+       )
+       freq := rand.Float64() * 3.0
+       anim := gif.GIF{LoopCount: nframes}
+       phase := 0.0
+       for i := 0; i < nframes; i++ {
+               rect := image.Rect(0, 0, 2*size+1, 2*size+1)
+               img := image.NewPaletted(rect, palette)
+               for t := 0.0; t < cycles*2*math.Pi; t += res {
+                       x := math.Sin(t)
+                       y := math.Sin(t*freq + phase)
+                       img.SetColorIndex(size+int(x*size+0.5), size+int(y*size+0.5), paletteIndex)
+               }
+               phase += 1
+               anim.Delay = append(anim.Delay, delay)
+               anim.Image = append(anim.Image, img)
+       }
+       gif.EncodeAll(out, &anim)
 }
 
 /* Exercise 1.6: Modify the Lissajous program to produce images in multiple colors by adding
-   more values to palette and then displaying them by changing the third argument of SetColorindex 
+   more values to palette and then displaying them by changing the third argument of SetColorindex
    in some interesting way
 */