logo
分类于: 计算机基础 互联网

简介

代码本色:用编程模拟自然系统

代码本色:用编程模拟自然系统 8.9分

资源最后更新于 2020-03-29 03:15:13

作者:〔美〕Daniel Shiffman

译者:周晗彬

出版社:出版社人民邮电出版社

出版日期:2015-01

ISBN:9787115369475

文件格式: pdf

标签: 网络 计算机 程序设计

简介· · · · · ·

本书介绍了用计算机模拟自然系统涉及的编程策略与技术,涵盖了基本的数学和物理概念,以及可视化地展示模拟结果所需的高级算法。读者将从构建基本的物理引擎开始,一步一步地学习如何创建智能移动的物体和复杂的系统,为进一步探索生成设计奠定基础。相关的知识点包括力、三角、分形、细胞自动机、自组织和遗传算法。本书的示例使用基于Java的开源语言及开发环境Processing编写。本书网站(http://www.natureofcode.com)上的示例是在浏览器中通过Processing的JavaScript模式运行的。Daniel Shiffman(作者),纽约大学Tisch艺术学院助理艺术教授,Nature of Code便是其主讲课程之一。多年来,他一直用Processing这门艺术家友好型开源语言开发教程、教学示例和代码库,拥有丰富的算法和应用教学经验。另外,其著作Learning Processing: A Beginner's Guide to Programming Images, Animation, and Interaction亦广受读者好评。更多信息请访问shiffman.net和natureofcode.com。周晗彬(译者),高级软件工程师,毕业于华中科技大学,主要兴趣集中在移动应用和手机游戏方面,现就职于某互联网公司从事手游开发。

想要: 点击会收藏到你的 我的收藏,可以在这里查看

已收: 表示已经收藏

Tips: 注册一个用户 可以通过用户中心得到电子书更新的通知哦

目录

  1. 献辞
  2. 推荐序
  3. 致谢
  4. 关于本书的故事
  5. Kickstarter
  6. 前言
  7. 这是一本什么书
  8. 关于Processing语言
  9. 阅读需知
  10. 你用什么阅读本书
  11. 本书的故事
  12. 第一部分:无生命的物体
  13. 第二部分:活物
  14. 第三部分:智能
  15. 本书的教学大纲
  16. 生态系统模拟项目
  17. 如何获取在线代码和提交反馈
  18. 第 0 章 引言
  19. 0.1 随机游走
  20. 0.2 随机游走类
  21. 0.3 概率和非均匀分布
  22. 0.4 随机数的正态分布
  23. 0.5 自定义分布的随机数
  24. 0.6 Perlin噪声(一种更平滑的算法)
  25. 0.6.1 映射噪声
  26. 0.6.2 二维噪声
  27. 0.7 前进
  28. 第 1 章 向量
  29. 1.1 向量
  30. 1.2 Processing中的向量
  31. 1.3 向量的加法
  32. 1.4 更多的向量运算
  33. 1.4.1 向量的减法
  34. 1.4.2 向量加减法的运算律
  35. 1.4.3 向量的乘法
  36. 1.4.4 更多的向量运算律
  37. 1.5 向量的长度
  38. 1.6 单位化向量
  39. 1.7 向量的运动:速度
  40. 1.8 向量的运动:加速度
  41. 加速度算法
  42. 1.9 静态函数和非静态函数
  43. 1.10 加速度的交互
  44. 第 2 章 力
  45. 2.1 力和牛顿运动定律
  46. 2.1.1 牛顿第一运动定律
  47. 2.1.2 牛顿第三运动定律
  48. 2.1.3 牛顿第三运动定律(从Processing的角度表述)
  49. 2.2 力和Processing的结合:将牛顿第二运动定律作为一个函数
  50. 牛顿第二运动定律
  51. 2.3 力的累加
  52. 2.4 处理质量
  53. 2.5 制造外力
  54. 2.6 地球引力和力的建模
  55. 2.7 摩擦力
  56. 2.8 空气和流体阻力
  57. 2.9 引力
  58. 2.10 万有引(斥)力
  59. 第 3 章 振荡
  60. 3.1 角度
  61. 3.2 角运动
  62. 3.3 三角函数
  63. 3.4 指向运动的方向
  64. 3.5 极坐标系和笛卡儿坐标系
  65. 3.6 振荡振幅和周期
  66. 3.7 带有角速度的振荡
  67. 3.8 波
  68. 3.9 三角函数和力:钟摆
  69. 3.10 弹力
  70. 第 4 章 粒子系统
  71. 4.1 为什么需要粒子系统
  72. 4.2 单个粒子
  73. 4.3 使用 ArrayList
  74. 4.4 粒子系统类
  75. 4.5 由系统组成的系统
  76. 4.6 继承和多态的简介
  77. 4.7 继承基础
  78. 4.8 用继承实现粒子类
  79. 4.9 多态基础
  80. 4.10 用多态实现粒子系统
  81. 4.11 受力作用的粒子系统
  82. 4.12 带排斥对象的粒子系统
  83. 4.13 图像纹理和加法混合
  84. 第 5 章 物理函数库
  85. 5.1 Box2D及其适用性
  86. 5.2 获取Processing中的Box2D
  87. 5.3 Box2D基础
  88. 5.3.1 SETUP
  89. 5.3.2 DRAW
  90. 5.3.3 Box2D世界的核心元素
  91. 5.4 生活在Box2D的世界
  92. 5.5 创建一个Box2D物体
  93. 5.5.1 第1步:定义一个物体
  94. 5.5.2 第2步:设置物体的定义
  95. 5.5.3 第3步:创建物体
  96. 5.5.4 第4步:为物体的初始状态设置其他属性
  97. 5.6 三要素:物体、形状和夹具
  98. 5.6.1 第1步:定义形状
  99. 5.6.2 第2步:创建夹具
  100. 5.6.3 第3步:用夹具将形状连接到物体上
  101. 5.7 Box2D和Processing的结合
  102. 5.7.1 第1步:在主程序(即setup()和draw()函数)中添加Box2D
  103. 5.7.2 第2步:建立Processing盒子对象和Box2D物体对象之间的联系
  104. 5.8 固定的Box2D对象
  105. 5.9 弯曲的边界
  106. 5.9.1 第1步:定义一个物体
  107. 5.9.2 第2步:定义形状
  108. 5.9.3 第3步:配置形状
  109. 5.9.4 第4步:使用夹具将形状连接到物体上
  110. 5.10 复杂的形状
  111. 5.11 Box2D关节
  112. 5.11.1 步骤1:确保有两个物体
  113. 5.11.2 步骤2:定义关节
  114. 5.11.3 步骤3:配置关节的属性
  115. 5.11.4 步骤4:创建关节
  116. 5.12 回到力的话题
  117. 5.13 碰撞事件
  118. 5.13.1 步骤1: Contact对象,你能否告诉我哪两个物体发生了碰撞
  119. 5.13.2 步骤2:夹具对象,你能否告诉我你连接在哪个物体上
  120. 5.13.3 步骤3:物体,你能否告诉我你连接在哪个粒子对象上
  121. 5.14 小插曲:积分法
  122. 5.15 toxiclibs的Verlet Physics物理库
  123. 5.15.1 获取toxiclibs
  124. 5.15.2 VerletPhysics的核心元素
  125. 5.15.3 toxiclibs中的向量
  126. 5.15.4 构建toxiclibs的物理世界
  127. 5.16 toxiclibs中的粒子和弹簧
  128. 5.17 整合代码:一个简单的交互式弹簧
  129. 5.18 相连的系统I:绳子
  130. 5.19 相连的系统II:力导向图
  131. 5.20 吸引和排斥行为
  132. 第 6 章 自治智能体
  133. 6.1 内部的力
  134. 6.2 车辆和转向
  135. 6.3 转向力
  136. 6.4 到达行为
  137. 6.5 你的意图:所需速度
  138. 6.6 流场
  139. 6.7 点乘
  140. 6.8 路径跟随
  141. 6.9 多段路径跟随
  142. 6.10 复杂系统
  143. 6.11 群体行为(不要碰到对方)
  144. 6.12 结合
  145. 6.13 群集
  146. 6.14 算法效率(为什么程序跑得这么慢)
  147. 6.15 最后的几个注意事项:优化技巧
  148. 6.15.1 长度的平方(或距离的平方)
  149. 6.15.2 正弦余弦查询表
  150. 6.15.3 创建不必要的 PVector 对象
  151. 第 7 章 细胞自动机
  152. 7.1 什么是细胞自动机
  153. 7.2 初等细胞自动机
  154. 7.3 如何编写初等细胞自动机
  155. 7.4 绘制初等CA
  156. 7.5 Wolfram分类
  157. 7.6 生命游戏
  158. 7.7 编写生命游戏
  159. 7.8 面向对象的细胞实现
  160. 7.9 传统CA的变化
  161. 第 8 章 分形
  162. 8.1 什么是分形
  163. 8.2 递归
  164. 8.3 用递归函数实现康托尔集
  165. 8.4 科赫曲线和 ArrayList 技术
  166. 8.5 树
  167. 8.6 L系统
  168. 第 9 章 代码的进化
  169. 9.1 遗传算法:启发自真实现象
  170. 9.2 为什么使用遗传算法
  171. 9.3 达尔文的自然选择
  172. 9.4 遗传算法,第一部分:创建种群
  173. 9.5 遗传算法,第二部分:选择
  174. 9.6 遗传算法,第三部分:繁殖
  175. 9.7 创建种群的代码
  176. 9.7.1 第1步:初始化种群
  177. 9.7.2 第2步:选择
  178. 第3步:繁殖
  179. 9.8 遗传算法:整合代码
  180. 9.9 遗传算法:创建自己的遗传算法
  181. 9.9.1 第1点:更改变量
  182. 9.9.2 第2点:适应度函数
  183. 9.9.3 第3点:基因型和表现型
  184. 9.10 力的进化:智能火箭
  185. 第1点:种群规模和突变率
  186. 第2点:适应度函数
  187. 第3点:基因型和表现型
  188. 9.11 智能火箭:整合代码
  189. 改进1:障碍物
  190. 改进2:更快地击中靶子
  191. 9.12 交互式选择
  192. 9.13 生态系统模拟
  193. 9.13.1 基因型和表现型
  194. 9.13.2 选择和繁殖
  195. 第 10 章 神经网络
  196. 10.1 人工神经网络:导论和应用
  197. 10.2 感知器
  198. 10.3 用感知器进行简单的模式识别
  199. 10.4 实现感知器
  200. 10.5 转向感知器
  201. 10.6 还记得这是个“网络”吗
  202. 10.7 神经网络图
  203. 10.8 实现前馈动画
  204. 10.9 结语
  205. 参考文献
  206. 图书
  207. 文章