Python是一種解釋型、面向?qū)ο蟆?dòng)態(tài)數(shù)據(jù)類型的高級(jí)程序設(shè)計(jì)語(yǔ)言。通過(guò)Python編程, 我們能夠解決現(xiàn)實(shí)生活中的很多任務(wù)。本書(shū)通過(guò)14個(gè)有趣的項(xiàng)目, 幫助和鼓勵(lì)讀者探索Python編程的世界。全書(shū)共14章, 分別介紹了通過(guò)Python編程實(shí)現(xiàn)的一些有趣項(xiàng)目, 包括解析iTunes播放列表、模擬人工生命、創(chuàng)建ASCII碼藝術(shù)圖、照片拼接、生成三維立體圖、創(chuàng)建粒子模擬的煙花噴泉效果、實(shí)現(xiàn)立體光線投射算法, 以及用Python結(jié)合Arduino和樹(shù)莓派等硬件的電子項(xiàng)目。本書(shū)并不介紹Python語(yǔ)言的基礎(chǔ)知識(shí), 而是通過(guò)一系列不簡(jiǎn)單的項(xiàng)目, 展示如何用Python來(lái)解決各種實(shí)際問(wèn)題, 以及如何使用一些流行的Python庫(kù)。
Python 是一種強(qiáng)大的編程語(yǔ)言,容易學(xué)習(xí)而且充滿樂(lè)趣。但掌握了基本知識(shí)后,接下來(lái)做什么?
本書(shū)包含了一組富有想象力的編程項(xiàng)目,它們將引導(dǎo)你用Python 來(lái)制作圖像和音樂(lè)、模擬現(xiàn)實(shí)世界的現(xiàn)象,并與
Arduino 和樹(shù)莓派這樣的硬件進(jìn)行交互。你將學(xué)習(xí)使用常見(jiàn)的Python 工具和庫(kù),如numpy、matplotlib 和pygame,
來(lái)完成以下工作:
● 利用參數(shù)方程和turtle模塊生成萬(wàn)花尺圖案;
● 通過(guò)模擬頻率泛音在計(jì)算機(jī)上創(chuàng)作音樂(lè);
● 將圖形圖像轉(zhuǎn)換為ASCII文本圖形;
● 編寫一個(gè)三維立體畫(huà)程序,生成隱藏在隨機(jī)圖案下的3D圖像;
● 通過(guò)探索粒子系統(tǒng)、透明度和廣告牌技術(shù),利用OpenGL著色器制作逼真的動(dòng)畫(huà);
● 利用來(lái)自CT和MRI掃描的數(shù)據(jù)實(shí)現(xiàn)3D可視化;
● 將計(jì)算機(jī)連接到Arduino編程,創(chuàng)建響應(yīng)音樂(lè)的激光秀。
通過(guò)本書(shū),你可以享受作為極客的真正樂(lè)趣!
Mahesh Venkitachalam是一位擁有二十年編程經(jīng)驗(yàn)的軟件工程師。 他從八年級(jí)就開(kāi)始培養(yǎng)對(duì)技術(shù)的熱情,匯集成了他受歡迎的電子和編程博客:electronut.in。
第1章 解析iTunes播放列表 3
1.1 iTunes播放列表文件剖析 3
1.2 所需模塊 5
1.3 代碼 5
1.3.1 查找重復(fù) 5
1.3.2 提取重復(fù) 6
1.3.3 查找多個(gè)播放列表中
共同的音軌 7
1.3.4 收集統(tǒng)計(jì)信息 8
1.3.5 繪制數(shù)據(jù) 8
1.3.6 命令行選項(xiàng) 9
1.4 完整代碼 10
1.5 運(yùn)行程序 13
1.6 小結(jié) 14
1.7 實(shí)驗(yàn) 14
第2章 萬(wàn)花尺 15
2.1 參數(shù)方程 16
2.1.1 萬(wàn)花尺方程 17
2.1.2 海龜畫(huà)圖 19
2.2 所需模塊 20
2.3 代碼 20
2.3.1 Spiro構(gòu)造函數(shù) 20
2.3.2 設(shè)置函數(shù) 21
2.3.3 restart()方法 21
2.3.4 draw()方法 22
2.3.5 創(chuàng)建動(dòng)畫(huà) 22
2.3.5 SpiroAnimator類 23
2.3.5 genRandomParams()方法 24
2.3.6 重新啟動(dòng)程序 24
2.3.7 update()方法 25
2.3.8 顯示或隱藏光標(biāo) 25
2.3.9 保存曲線 25
2.3.10 解析命令行參數(shù)和初始化 26
2.4 完整代碼 27
2.5 運(yùn)行萬(wàn)花尺動(dòng)畫(huà) 32
2.6 小結(jié) 33
2.7 實(shí)驗(yàn) 33
第二部分 模擬生命
第3章 Conway生命游戲 37
3.1 工作原理 38
3.2 所需模塊 39
3.3 代碼 40
3.3.1 表示網(wǎng)格 40
3.3.2 初始條件 41
3.3.3 邊界條件 41
3.3.4 實(shí)現(xiàn)規(guī)則 42
3.3.5 向程序發(fā)送命令行參數(shù) 43
3.3.6 初始化模擬 43
3.4 完整代碼 44
3.5 運(yùn)行模擬人生的游戲 46
3.6 小結(jié) 47
3.7 實(shí)驗(yàn) 47
第4章 用Karplus-Strong算法產(chǎn)生
音樂(lè)泛音 49
4.1 工作原理 51
4.1.1 模擬 51
4.1.2 創(chuàng)建WAV文件 52
4.1.3 小調(diào)五聲音階 53
4.2 所需模塊 54
4.3 代碼 54
4.3.1 用deque實(shí)現(xiàn)環(huán)形緩沖區(qū) 54
4.3.2 實(shí)現(xiàn)Karplus-Strong算法 55
4.3.3 寫WAV文件 56
4.3.4 用pygame播放WAV
文件 56
4.3.5 main()方法 57
4.4 完整代碼 58
4.5 運(yùn)行撥弦模擬 61
4.6 小結(jié) 62
4.7 實(shí)驗(yàn) 62
第5章 類鳥(niǎo)群:仿真鳥(niǎo)群 63
5.1 工作原理 64
5.2 所需模塊 64
5.3 代碼 64
5.3.1 計(jì)算類鳥(niǎo)群的位置和速度 65
5.3.2 設(shè)置邊界條件 66
5.3.3 繪制類鳥(niǎo)群 67
5.3.4 應(yīng)用類鳥(niǎo)群規(guī)則 68
5.3.5 添加個(gè)體 70
5.3.6 驅(qū)散類鳥(niǎo)群 71
5.3.7 命令行參數(shù) 71
5.3.8 Boids類 71
5.4 完整代碼 72
5.5 運(yùn)行類鳥(niǎo)群模擬 75
5.6 小結(jié) 76
5.7 實(shí)驗(yàn) 76
第三部分 圖片之樂(lè)
第6章 ASCII文本圖形 79
6.1 工作原理 80
6.2 所需模塊 81
6.3 代碼 81
6.3.1 定義灰度等級(jí)和網(wǎng)格 82
6.3.2 計(jì)算平均亮度 82
6.3.3 從圖像生成ASCII內(nèi)容 83
6.3.4 命令行選項(xiàng) 84
6.3.5 將ASCII文本圖形字符
串寫入文本文件 84
6.4 完整代碼 85
6.5 運(yùn)行ASCII文本圖形生成程序 87
6.6 小結(jié) 87
6.7 實(shí)驗(yàn) 88
第7章 照片馬賽克 89
7.1 工作原理 90
7.1.1 分割目標(biāo)圖像 90
7.1.2 平均顏色值 91
7.1.3 匹配圖像 91
7.2 所需模塊 92
7.3 代碼 92
7.3.1 讀入小塊圖像 92
7.3.2 計(jì)算輸入圖像的平均
顏色值 93
7.3.3 將目標(biāo)圖像分割成網(wǎng)格 93
7.3.4 尋找小塊的最佳匹配 94
7.3.5 創(chuàng)建圖像網(wǎng)格 95
7.3.6 創(chuàng)建照片馬賽克 96
7.3.7 添加命令行選項(xiàng) 97
7.3.8 控制照片馬賽克的大小 97
7.4 完整代碼 98
7.6 運(yùn)行照片馬賽克生成程序 102
7.7 小結(jié) 103
7.7 實(shí)驗(yàn) 103
第8章 三維立體畫(huà) 105
8.1 工作原理 106
8.1.1 感知三維立體畫(huà)中的深度 106
8.1.2 深度圖 108
8.2 所需模塊 109
8.3 代碼 109
8.3.1 重復(fù)給定的平鋪圖像 109
8.3.2 從創(chuàng)建隨機(jī)圓平鋪 110
8.3.3 創(chuàng)建三維立體畫(huà) 111
8.3.4 命令行選項(xiàng) 112
8.4 完整代碼 113
8.5 運(yùn)行三維立體畫(huà)生成程序 115
8.6 小結(jié) 117
8.7 實(shí)驗(yàn) 117
第四部分 走進(jìn)三維
第9章 理解OpenGL 121
9.1 老式OpenGL 122
9.2 現(xiàn)代OpenGL:三維圖形管線 124
9.2.1 幾何圖元 124
9.2.2 三維變換 125
9.2.3 著色器 127
9.2.4 頂點(diǎn)緩沖區(qū) 128
9.2.5 紋理貼圖 129
9.2.6 顯示OpenGL 129
9.3 所需模塊 130
9.4 代碼 130
9.4.1 創(chuàng)建OpenGL窗口 130
9.4.2 設(shè)置回調(diào) 131
9.4.3 Scene類 133
9.5 完整代碼 137
9.6 運(yùn)行OpenGL應(yīng)用程序 142
9.7 小結(jié) 143
9.8 實(shí)驗(yàn) 143
第10章 粒子系統(tǒng) 145
10.1 工作原理 146
10.1.1 為粒子運(yùn)動(dòng)建!147
10.1.2 設(shè)置最大范圍 147
10.1.3 渲染粒子 149
10.1.4 利用OpenGL混合來(lái)
創(chuàng)建更逼真火花 149
10.1.5 使用公告板 150
10.1.6 生成火花動(dòng)畫(huà) 151
10.2 所需模塊 151
10.3 粒子系統(tǒng)的代碼 151
10.3.1 定義粒子的幾何形狀 152
10.3.2 為粒子定義時(shí)間延遲
數(shù)組 153
10.3.3 設(shè)置粒子初始速度 153
10.3.4 創(chuàng)建頂點(diǎn)著色器 154
10.3.5 創(chuàng)建片段著色器 156
10.3.6 渲染 156
10.3.7 Camera類 158
10.4 粒子系統(tǒng)完整代碼 158
10.5 盒子代碼 164
10.6 主程序代碼 166
10.6.1 每步更新這些粒子 167
10.6.2 鍵盤處理程序 168
10.6.3 管理主程序循環(huán) 168
10.7 完整主程序代碼 169
10.8 運(yùn)行程序 172
10.9 小結(jié) 172
10.10 實(shí)驗(yàn) 172
第11章 體渲染 173
11.1 工作原理 174
11.1.1 數(shù)據(jù)格式 174
11.1.2 生成光線 175
11.1.3 顯示OpenGL窗口 177
11.2 所需模塊 178
11.3 項(xiàng)目代碼概述 178
11.4 生成三維紋理 178
11.5 完整的三維紋理代碼 180
11.6 生成光線 181
11.6.1 定義顏色立方體的
幾何形狀 182
11.6.2 創(chuàng)建幀緩沖區(qū)對(duì)象 184
11.6.3 渲染立方體的背面 185
11.6.4 渲染立方體的正面 185
11.6.5 渲染整個(gè)立方體 186
11.6.6 調(diào)整大小處理程序 187
11.7 完整的光線生成代碼 187
11.8 體光線投射 192
11.8.1 頂點(diǎn)著色器 194
11.8.2 片段著色器 194
11.9 完整的體光線投射代碼 196
11.10 二維切片 199
11.10.1 頂點(diǎn)著色器 201
11.10.2 片段著色器 202
11.10.3 針對(duì)二維切片的
用戶界面 202
11.11 完整的二維切片代碼 203
11.12 代碼整合 206
11.13 完整的主文件代碼 207
11.14 運(yùn)行程序 209
11.15 小結(jié) 210
11.16 實(shí)驗(yàn) 210
第五部分 玩硬件
第12章 Arduino簡(jiǎn)介 215
12.1 Arduino 216
12.2 Arduino生態(tài)系統(tǒng) 217
12.2.1 語(yǔ)言 218
12.2.2 IDE 218
12.2.3 社區(qū) 218
12.2.4 外設(shè) 219
12.3 所需模塊 219
12.4 搭建感光電路 219
12.4.1 電路工作原理 219
12.4.2 Arduino程序 220
12.4.3 創(chuàng)建實(shí)時(shí)圖表 221
12.5 Python代碼 222
12.6 完整的Python代碼 224
12.7 運(yùn)行程序 226
12.8 小結(jié) 227
12.9 實(shí)驗(yàn) 227
第13章 激光音樂(lè)秀 229
13.1 用激光產(chǎn)生圖案 230
13.1.1 電機(jī)控制 230
13.1.2 快速傅里葉變換 232
13.2 所需模塊 233
13.2.1 搭建激光秀 234
13.2.2 連接電機(jī)驅(qū)動(dòng)器 236
13.3 Arduino程序 237
13.3.1 配置Arduino數(shù)字
輸出引腳 238
13.3.2 主循環(huán) 238
13.3.3 停止電機(jī) 240
13.4 Python代碼 240
13.4.1 選擇音頻設(shè)備 241
13.4.2 從輸入設(shè)備讀取數(shù)據(jù) 241
13.4.3 計(jì)算數(shù)據(jù)流的FFT 242
13.4.4 從FFT值提取頻率
信息 243
13.4.5 將頻率轉(zhuǎn)換為電機(jī)
速度和方向 243
13.4.6 測(cè)試電機(jī)設(shè)置 244
13.4.7 命令行選項(xiàng) 245
13.4.8 手動(dòng)測(cè)試 245
13.5 完整的Python代碼 246
13.6 運(yùn)行程序 249
13.7 小結(jié) 250
13.8 實(shí)驗(yàn) 250
第14章 基于樹(shù)莓派的天氣監(jiān)控器 253
14.1 硬件 254
14.1.1 DHT11溫濕度傳感器 254
14.1.2 樹(shù)莓派 255
14.1.3 設(shè)置樹(shù)莓派 255
14.2 安裝和配置軟件 256
14.2.1 操作系統(tǒng) 257
14.2.2 初始配置 257
14.2.3 Wifi設(shè)置 257
14.2.4 設(shè)置編程環(huán)境 258
14.2.5 通過(guò)SSH連接 259
14.2.6 Web框架Bottle 259
14.2.7 用flot繪制 260
14.2.8 關(guān)閉樹(shù)莓派 261
14.3 搭建硬件 262
14.4 代碼 263
14.4.1 處理傳感器數(shù)據(jù)請(qǐng)求 264
14.4.2 繪制數(shù)據(jù) 264
14.4.3 update()方法 267
14.4.4 用于LED的JavaScript
處理程序 267
14.4.5 添加交互性 268
14.5 完整代碼 269
14.6 運(yùn)行程序 272
14.7 小結(jié) 273
14.8 實(shí)驗(yàn) 273
附錄A 軟件安裝 275
附錄B 基礎(chǔ)實(shí)用電子學(xué) 281
附錄C 樹(shù)莓派的建議和技巧 289