開発環境
- macOS Mojave - Apple (OS)
- Emacs (Text Editor)
- Windows 10 Pro (OS)
- Visual Studio Code (Text Editor)
- Go (プログラミング言語)
プログラミング言語Go (ADDISON-WESLEY PROFESSIONAL COMPUTING SERIES) (Alan A.A. Donovan(著)、Brian W. Kernighan(著)、柴田 芳樹(翻訳)、丸善出版)の第1章(チュートリアル)、1.4(GIFアニメーション)、練習問題1.6の解答を求めてみる。
コード
package main import ( "fmt" "image" "image/color" "image/gif" "io" "math" "math/rand" "os" "time" ) var palette = []color.Color{ color.RGBA{0, 0, 0, 0xff}, color.RGBA{0xff, 0, 0, 0xff}, color.RGBA{0, 0xff, 0, 0xff}, color.RGBA{0, 0, 0xff, 0xff}} func main() { for _, color := range palette { fmt.Println(color) } rand.Seed(time.Now().UTC().UnixNano()) for i := 0; i < 10; i++ { filename := fmt.Sprintf("sample6_%d.gif", i) file, err := os.Create(filename) if err != nil { fmt.Println(err) return } lissajous(file) file.Close() } } func lissajous(out io.Writer) { 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), uint8(rand.Intn(len(palette)-1)+1)) } phase += 0.1 anim.Delay = append(anim.Delay, delay) anim.Image = append(anim.Image, img) } gif.EncodeAll(out, &anim) }
入出力結果(Terminal, cmd(コマンドプロンプト))
$ go run sample6.go {0 0 0 255} {255 0 0 255} {0 255 0 255} {0 0 255 255} $
![](https://3.bp.blogspot.com/-jlruO-mMbnA/XDQc_nWAIvI/AAAAAAAAB8Y/SYaRt1BTRbgla7aOwooteupzxAw-fHxcACLcBGAs/s1600/sample6_0.gif)
![](https://4.bp.blogspot.com/-5G9h1-9FOIo/XDQc_g7dnPI/AAAAAAAAB8g/DZUXJKGMjB8bGYZ_kniWM4ZPoT4GutdnACLcBGAs/s1600/sample6_1.gif)
![](https://2.bp.blogspot.com/-adgzaOuVVV8/XDQc_i0W1hI/AAAAAAAAB8c/S8zhhH4jdR4JWk6E8PuIRbi5jJbbN05OACLcBGAs/s1600/sample6_2.gif)
![](https://3.bp.blogspot.com/-MUT5TXegHkw/XDQdAhMF5hI/AAAAAAAAB8k/yCiJECrgSgA60NpgWndW3VB96LtHtWyVQCLcBGAs/s1600/sample6_3.gif)
![](https://4.bp.blogspot.com/-8mSQQhrfvz8/XDQdBE4TldI/AAAAAAAAB8o/GrQKzw06Ihcmky5qX9psbjZ24ecsoLcKgCLcBGAs/s1600/sample6_4.gif)
![](https://2.bp.blogspot.com/-kt75LDVVYIQ/XDQdBR55BjI/AAAAAAAAB8s/EQaoSQdquMcNQPguD-7yRkhgs9K7N_PxACLcBGAs/s1600/sample6_5.gif)
![](https://1.bp.blogspot.com/-0CPq0_WHKbU/XDQdBrnyRvI/AAAAAAAAB8w/kh6K0CWEqC417nhhLFxm66zJxdqBuv9cwCLcBGAs/s1600/sample6_6.gif)
![](https://1.bp.blogspot.com/-CCwKRfTsCp0/XDQdCOs5FdI/AAAAAAAAB80/ZebB3uU5wSkBXadJxbkOQtzDj4XhHgosQCLcBGAs/s1600/sample6_7.gif)
![](https://1.bp.blogspot.com/-TgG2Fg9kfLw/XDQdCTi-H7I/AAAAAAAAB84/hEdi7Xx0r60So7FKrNvtQFtQXTXFi4LfQCLcBGAs/s1600/sample6_8.gif)
![](https://3.bp.blogspot.com/-seDzNVHmbUU/XDQdCgQe53I/AAAAAAAAB88/eH0ci2lzBJ8Xp9KGZaA9GJ341x7lvxO6QCLcBGAs/s1600/sample6_9.gif)
0 コメント:
コメントを投稿