章 解析iTunes播放列表3
1.1iTunes播放列表文件剖析3
1.2所需模块5
1.3代码5
1.3.1查找重复5
1.3.2提取重复6
1.3.3查找多个播放列表中
共同的音轨7
1.3.4收集统计信息8
1.3.5绘制数据8
1.3.6命令行选项9
1.4完整代码10
1.5运行程序13
1.6小结14
1.7实验14
章 解析iTunes播放列表3
1.1iTunes播放列表文件剖析3
1.2所需模块5
1.3代码5
1.3.1查找重复5
1.3.2提取重复6
1.3.3查找多个播放列表中
共同的音轨7
1.3.4收集统计信息8
1.3.5绘制数据8
1.3.6命令行选项9
1.4完整代码10
1.5运行程序13
1.6小结14
1.7实验14
第2章万花尺15
2.1参数方程16
2.1.1万花尺方程17
2.1.2海龟画图19
2.2所需模块20
2.3代码20
2.3.1Spiro构造函数20
2.3.2设置函数21
2.3.3restart()方法21
2.3.4draw()方法22
2.3.5创建动画22
2.3.5SpiroAnimator类23
2.3.5genRandomParams()方法24
2.3.6重新启动程序24
2.3.7update()方法25
2.3.8显示或隐藏光标25
2.3.9保存曲线25
2.3.10解析命令行参数和初始化26
2.4完整代码27
2.5运行万花尺动画32
2.6小结33
2.7实验33
第二部分模拟生命
第3章Conway生命游戏37
3.1工作原理38
3.2所需模块39
3.3代码40
3.3.1表示网格40
3.3.2初始条件41
3.3.3边界条件41
3.3.4实现规则42
3.3.5向程序发送命令行参数43
3.3.6初始化模拟43
3.4完整代码44
3.5运行模拟人生的游戏46
3.6小结47
3.7实验47
第4章用Karplus-Strong算法产生
音乐泛音49
4.1工作原理51
4.1.1模拟51
4.1.2创建WAV文件52
4.1.3小调五声音阶53
4.2所需模块54
4.3代码54
4.3.1用deque实现环形缓冲区54
4.3.2实现Karplus-Strong算法55
4.3.3写WAV文件56
4.3.4用pygame播放WAV文件56
4.3.5main()方法57
4.4完整代码58
4.5运行拨弦模拟61
4.6小结62
4.7实验62
第5章类鸟群:仿真鸟群63
5.1工作原理64
5.2所需模块64
5.3代码64
5.3.1计算类鸟群的位置和速度65
5.3.2设置边界条件66
5.3.3绘制类鸟群67
5.3.4应用类鸟群规则68
5.3.5添加个体70
5.3.6驱散类鸟群71
5.3.7命令行参数71
5.3.8Boids类71
5.4完整代码72
5.5运行类鸟群模拟75
5.6小结76
5.7实验76
第三部分图片之乐
第6章ASCII文本图形79
6.1工作原理80
6.2所需模块81
6.3代码81
6.3.1定义灰度等级和网格82
6.3.2计算平均亮度82
6.3.3从图像生成ASCII内容83
6.3.4命令行选项84
6.3.5将ASCII文本图形字符串写入文本文件84
6.4完整代码85
6.5运行ASCII文本图形生成程序87
6.6小结87
6.7实验88
第7章照片马赛克89
7.1工作原理90
7.1.1分割目标图像90
7.1.2平均颜色值91
7.1.3匹配图像91
7.2所需模块92
7.3代码92
7.3.1读入小块图像92
7.3.2计算输入图像的平均颜色值93
7.3.3将目标图像分割成网格93
7.3.4寻找小块的匹配94
7.3.5创建图像网格95
7.3.6创建照片马赛克96
7.3.7添加命令行选项97
7.3.8控制照片马赛克的大小97
7.4完整代码98
7.6运行照片马赛克生成程序102
7.7小结103
7.7实验103
第8章三维立体画105
8.1工作原理106
8.1.1感知三维立体画中的深度106
8.1.2深度图108
8.2所需模块109
8.3代码109
8.3.1重复给定的平铺图像109
8.3.2从创建随机圆平铺110
8.3.3创建三维立体画111
8.3.4命令行选项112
8.4完整代码113
8.5运行三维立体画生成程序115
8.6小结117
8.7实验117
第四部分走进三维
第9章理解OpenGL121
9.1老式OpenGL122
9.2现代OpenGL:三维图形管线124
9.2.1几何图元124
9.2.2三维变换125
9.2.3着色器127
9.2.4顶点缓冲区128
9.2.5纹理贴图129
9.2.6显示OpenGL129
9.3所需模块130
9.4代码130
9.4.1创建OpenGL窗口130
9.4.2设置回调131
9.4.3Scene类133
9.5完整代码137
9.6运行OpenGL应用程序142
9.7小结143
9.8实验143
0章粒子系统145
10.1工作原理146
10.1.1为粒子运动建模147
10.1.2设置优选范围147
10.1.3渲染粒子149
10.1.4利用OpenGL混合来创建更逼真火花149
10.1.5使用公告板150
10.1.6生成火花动画151
10.2所需模块151
10.3粒子系统的代码151
10.3.1定义粒子的几何形状152
10.3.2为粒子定义时间延迟数组153
10.3.3设置粒子初始速度153
10.3.4创建顶点着色器154
10.3.5创建片段着色器156
10.3.6渲染156
10.3.7Camera类158
10.4粒子系统完整代码158
10.5盒子代码164
10.6主程序代码166
10.6.1每步更新这些粒子167
10.6.2键盘处理程序168
10.6.3管理主程序循环168
10.7完整主程序代码169
10.8运行程序172
10.9小结172
10.10实验172
1章体渲染173
11.1工作原理174
11.1.1数据格式174
11.1.2生成光线175
11.1.3显示OpenGL窗口177
11.2所需模块178
11.3项目代码概述178
11.4生成三维纹理178
11.5完整的三维纹理代码180
11.6生成光线181
11.6.1定义颜色立方体的几何形状182
11.6.2创建帧缓冲区对象184
11.6.3渲染立方体的背面185
11.6.4渲染立方体的正面185
11.6.5渲染整个立方体186
11.6.6调整大小处理程序187
11.7完整的光线生成代码187
11.8体光线投射192
11.8.1顶点着色器194
11.8.2片段着色器194
11.9完整的体光线投射代码196
11.10二维切片199
11.10.1顶点着色器201
11.10.2片段着色器202
11.10.3针对二维切片的用户界面202
11.11完整的二维切片代码203
11.12代码整合206
11.13完整的主文件代码207
11.14运行程序209
11.15小结210
11.16实验210
第五部分玩硬件
2章Arduino简介215
12.1Arduino216
12.2Arduino生态系统217
12.2.1语言218
12.2.2IDE218
12.2.3社区218
12.2.4外设219
12.3所需模块219
12.4搭建感光电路219
12.4.1电路工作原理219
12.4.2Arduino程序220
12.4.3创建实时图表221
12.5Python代码222
12.6完整的Python代码224
12.7运行程序226
12.8小结227
12.9实验227
3章激光音乐秀229
13.1用激光产生图案230
13.1.1电机控制230
13.1.2快速傅里叶变换232
13.2所需模块233
13.2.1搭建激光秀234
13.2.2连接电机驱动器236
13.3Arduino程序237
13.3.1配置Arduino数字输出引脚238
13.3.2主循环238
13.3.3停止电机240
13.4Python代码240
13.4.1选择音频设备241
13.4.2从输入设备读取数据241
13.4.3计算数据流的FFT242
13.4.4从FFT值提取频率信息243
13.4.5将频率转换为电机速度和方向243
13.4.6测试电机设置244
13.4.7命令行选项245
13.4.8手动测试245
13.5完整的Python代码246
13.6运行程序249
13.7小结250
13.8实验250
4章基于树莓派的天气监控器253
14.1硬件254
14.1.1DHT11温湿度传感器254
14.1.2树莓派255
14.1.3设置树莓派255
14.2安装和配置软件256
14.2.1操作系统257
14.2.2初始配置257
14.2.3Wifi设置257
14.2.4设置编程环境258
14.2.5通过SSH连接259
14.2.6Web框架Bottle259
14.2.7用flot绘制260
14.2.8关闭树莓派261
14.3搭建硬件262
14.4代码263
14.4.1处理传感器数据请求264
14.4.2绘制数据264
14.4.3update()方法267
14.4.4用于LED的JavaScript处理程序267
14.4.5添加交互性268
14.5完整代码269
14.6运行程序272
14.7小结273
14.8实验273
附录A软件安装275
附录B基础实用电子学281
附录C树莓派的建议和技巧289