From 7c98822f3b1f346472f09e83a62450b643ef0e10 Mon Sep 17 00:00:00 2001 From: Robert Stachecki Date: Thu, 22 Nov 2018 19:20:18 +0000 Subject: [PATCH] Zaktualizuj 'serwer.go' --- serwer.go | 88 +++++++++++++++++++++++++++++-------------------------- 1 file changed, 46 insertions(+), 42 deletions(-) diff --git a/serwer.go b/serwer.go index f6c6dda..8473686 100644 --- a/serwer.go +++ b/serwer.go @@ -1,48 +1,52 @@ package main import ( - "log" - "net/http" - "image" - "image/color" - "image/gif" - "io" - "math" - "math/rand" +"log" +"net/http" +"image" +"image/color" +"image/gif" +"io" +"math" +"math/rand" ) var palette = []color.Color{color.White, color.Black} - const ( - whiteIndex = 0 // pierwszy kolor w zmiennej palette - blackIndex = 1 // następny kolor w zmiennej palette - ) +const ( +whiteIndex = 0 // pierwszy kolor w zmiennej palette +blackIndex = 1 // następny kolor w zmiennej palette +) func main() { - http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { - lissajous(w) - }) - log.Fatal(http.ListenAndServe("localhost:8000", nil)) - } +http.HandleFunc("/", handler) +http.HandleFunc("/gif", func(w http.ResponseWriter, r *http.Request) { +lissajous(w) +}) +log.Fatal(http.ListenAndServe("localhost:8000", nil)) +} +func handler(w http.ResponseWriter, r *http.Request) { +fmt.Fprintf(w, "URL.Path = %q\n", r.URL.Path) +} func lissajous(out io.Writer) { - const ( - cycles = 5 // liczba pełnych obiegów oscylatora x - res = 0.001 // rozdzielczość kątowa - size = 100 // rozmiar płótna obrazu [–size..+size] - nframes = 64 // liczba klatek animacji - delay = 8 // opóźnienie między klatkami w jednostkach 10 ms - ) - freq := rand.Float64() * 3.0 // częstotliwość względna oscylatora y - anim := gif.GIF{LoopCount: nframes} - phase := 0.0 // przesunięcie fazowe - 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), - blackIndex) - } - phase += 0.1 - anim.Delay = append(anim.Delay, delay) - anim.Image = append(anim.Image, img) - } - gif.EncodeAll(out, &anim) //ignorowanie błędów kodowania - } +const ( +cycles = 5 // liczba pełnych obiegów oscylatora x +res = 0.001 // rozdzielczość kątowa +size = 100 // rozmiar płótna obrazu [–size..+size] +nframes = 64 // liczba klatek animacji +delay = 8 // opóźnienie między klatkami w jednostkach 10 ms +) +freq := rand.Float64() * 3.0 // częstotliwość względna oscylatora y +anim := gif.GIF{LoopCount: nframes} +phase := 0.0 // przesunięcie fazowe +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), +blackIndex) +} +phase += 0.1 +anim.Delay = append(anim.Delay, delay) +anim.Image = append(anim.Image, img) +} +gif.EncodeAll(out, &anim) // UWAGA: ignorowanie błędów kodowania +} \ No newline at end of file