这是本章的最后一篇,如果你还不会绘制 lissajous 图像,请回去复习,因为本篇我们需要使用浏览器来访问我们我们的 http server,并在浏览器中显示 lissajous 的动态曲线。像下面这样:


图1 访问 lissajous 服务器

1. 程序

package mainimport ("fmt""image""image/color""image/gif""io""math""net/http""os"
)const (size    = 128nframes = 100
)func main() {http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {lissajous(w)})err := http.ListenAndServe(":8001", nil)if err != nil {fmt.Fprintf(os.Stderr, "%v\n", err)}
}func lissajous(w io.Writer) {p := 1.0q := 2.0phi := 0.0palett := []color.Color{color.RGBA{0xee, 0xee, 0xee, 0xff}, color.RGBA{0xff, 0, 0, 0xff}}rec := image.Rect(0, 0, 2*size, 2*size)s := float64(size - 10)step := 0.01// 生成 100 帧anim := gif.GIF{LoopCount: 0}for frames := 0; frames < nframes; frames++ {img := image.NewPaletted(rec, palett)for t := -2 * math.Pi; t <= 2*math.Pi; t += 0.0001 {x := math.Sin(p * t)y := math.Sin(q*t + phi)img.SetColorIndex(size+int(s*x+0.5), size+int(s*y+0.5), 1)}anim.Image = append(anim.Image, img)anim.Delay = append(anim.Delay, 10)// 每一帧 q 递增 0.01,这里相当于 q/p 以 0.01 步长递增p += step}gif.EncodeAll(w, &anim)
}

简单分析一下,我们将之前写的生成 lissajous 程序封装成了一个函数。这个函数的参数是一个 io.Writer 接口。前面我已经遇到过很多次这种类型了,并且我们也知道 os.Stdout 也实现了此接口。如果你对这个不熟悉没有关系,简单的认为 os.Stdout 这个对象它实现了 io.Writer 里的方法就行了。在上面的程序里,ResponseWriter 也是一个接口,你可以认为它继承了 io.Writer.

接下来,我们使用前面学到的 http server 将 lissajous 生成的图像输出到 ResponseWriter 对象里。

2. 总结

很高兴你已经完成了第一章的所有内容。虽然是走马观花,但是至少你已经对 go 的全貌了有了基本的印象。希望在下一步的学习中,我们能继续深入。

015-lissajous server相关推荐

  1. Python菜鸟学习手册14----标准库+代码实例

    Python Standard Library 翻译: Python 江湖群 10/06/07 20:10:08 编译 0.1. 关于本书 0.2. 代码约定 0.3. 关于例子 0.4. 如何联系我 ...

  2. [转]python各模块的学习

    [-] 01 关于本书 02 代码约定 03 关于例子 04 如何联系我们 1 核心模块 11 介绍 111 内建函数和异常 112 操作系统接口模块 113 类型支持模块 114 正则表达式 115 ...

  3. Python 模块大全(很详细!)

    转载:.... Python的模块大全,很全,有详细介绍! 另外附Python两个教程 1. Python详细教程(廖雪峰的官方网站,语言简洁!) 2. Python 进阶教程 (Vamei) 3. ...

  4. python 各种模块学习

    from:https://blog.csdn.net/weiwangchao_/article/details/70570508 转载:.... Python的模块大全,很全,有详细介绍! 另外附Py ...

  5. Python2.0 模块大全

    博客 学院 下载 更多 写博客 qq779488143 Python 模块大全(很详细!) 转载 2014年12月12日 20:47:18 标签: Python / 模块 / 教程 3694 转载:. ...

  6. 关于Flash Media Server

    原 Flash Communication Server 已经正式改名为 Flash Media Server. Flash Media Server 2.0 的最新消息 http://macrome ...

  7. 【Error2013:2013 lost connection to MYSQL server在处理大量数据运行中报错解决方法】

    报错场景: 处理数据相对较大6000万条的情况下,不知道为什么执行语句过程中出现了 Error2013:2013 lost connection to MYSQL server during quer ...

  8. 基于Vue+SpringCloudAlibaba微服务电商项目实战-商品服务-015:亿万级别商品详情页面实现动态优化

    015:亿万级别商品详情页面实现动态优化 1 亿万级别商品详情页面如何设计 2 使用Nginx缓存商品详情页面 3 使用FreeMarker生成静态化模板页面 4 openresty+lua实现亿级别 ...

  9. SQL Server返回插入数据的ID和受影响的行数

    首先看看数据库里面的数据(S_Id为自增长标识列): sql server 中返回上一次插入数据的ID(标识值)有三种方式: 第一种 @@IDENTITY: 1 insert into Student ...

  10. ArcGIS Server导入已有PNG格式瓦片

    ArcGIS Server导入已有PNG格式瓦片 参考文章:http://jingyan.baidu.com/article/22fe7ced38d20f3002617f89.html 使用环境 Ar ...

最新文章

  1. WinRAR也能实现智能备份
  2. java 用于xcopy复制_java调用copy复制子文件夹及文件到指定目录(非xcopy)
  3. oracle查询表nextval,Oracle Database 建立与查询 Sequence
  4. android drawLayout抽屉布局
  5. 计算机教师职称申报工作总结,个人评定一级教师工作总结
  6. 入选 CVPR 2020的旷视论文,到底写了啥?
  7. python语言的主网址-python调用浏览器,打开一个网址
  8. R 语言之数据分析高级方法「主成分分析」和「因子分析」
  9. bzoj 2212 Tree Rotations
  10. 3DES加密解密方法
  11. php简单答题系统,念做个简易php选择题答题系统
  12. 计算机拓扑结构网状图,网络拓扑结构大全和图片(星型、总线型、环型、树型、分布式、网状拓扑结构)...
  13. CDN中加速域名和源站地址和回源HOST是什么,应该怎么填
  14. PHP 视频格式转换类
  15. 用fail2ban阻止ssh暴力破解root密码
  16. 基尼系数,省级层面、地级市层面、Dagum1997方法,整理好的面板数据
  17. 圣诞节没什么礼物,来个爱心和彩色圣诞树代码(彩色圣诞树可以写喜欢的人名字哦)
  18. 2022-2028全球氢化镁行业调研及趋势分析报告
  19. 汇智动力2021年度软件测试学员就业分析报告
  20. 2021数模国赛D题

热门文章

  1. gan的几种变体_推荐系统系列第6部分,用于协作过滤的自动编码器的6种变体
  2. java poi word bookmarks_poi根据word/excel模板(书签)创建导出word/excel文档
  3. 帝国cms安装 mysql支持错误_帝国CMS安装时 mysql出错。
  4. css基础知识(尺寸、字体、文本、背景、列表)
  5. 网络安全必会的基础知识
  6. 如何判断三极管的集电极,基极和发射极?
  7. 【OHOS】常用命令整理
  8. js会员头像上传拖动处理头像类
  9. linux:挂载、rpm、yum、scp、ssh、crontab、时钟同步
  10. 图解“华为云潮汕火锅”的“牛里乾坤”