编辑推荐

  怎么通过软件捕捉自然界难以捉摸的演进和突变?
  理解物理世界背后的数学原理对我们创造数字世界有多大帮助?
  《图灵程序设计丛书·代码本色:用编程模拟自然系统》介绍了用计算机模拟自然系统涉及的编程策略与技术,涵盖了基本的数学和物理概念,以及可视化地展示模拟结果所需的高级算法。读者将从构建基本的物理引擎开始,一步一步地学习如何创建智能移动的物体和复杂的系统,为进一步探索生成设计奠定基础。相关的知识点包括力、三角、分形、细胞自动机、自组织和遗传算法。《图灵程序设计丛书·代码本色:用编程模拟自然系统》的示例使用基于Java的开源语言及开发环境Processing编写。
  作为纽约大学Tisch艺术学院NatureofCode课程主讲老师,Daniel集合了多年开发和教学经验,希望借由此书让大家真正了解如何用代码模拟自然现象。

内容简介

  《代码本色:用编程模拟自然系统》由纽约大学NatureofCode课程老师DanielShiffman写就,是一本借助开源语言Processing全面介绍如何用代码模拟自然世界的学习指南。作者从模拟生命物体、活物、智能系统三个层面,从手工编写Processing代码到使用现有的物理函数库模拟高级而复杂的行为,利用有趣的事例渐进式介绍了算法和模拟方面的高级编程策略和技术。主要内容涉及向量、力、粒子系统、三角函数、自治智能体、细胞自动机、分形、遗传算法和人工神经网络。
  《代码本色:用编程模拟自然系统》适合游戏设计师、好学的程序员、物理学爱好者及所有对计算机模拟和互动编程感兴趣的人学习参考。

作者简介

  DanielShiffman,纽约大学Tisch艺术学院助理艺术教授,NatureofCode便是其主讲课程之一。多年来,他一直用Processing这门艺术家友好型开源语言开发教程、教学示例和代码库,拥有丰富的算法和应用教学经验。另外,其著作LearningProcessing:ABeginner'sGuidetoProgrammingImages,Animation,andInteraction亦广受读者好评。

精彩书评

  ★“自然现象的模拟技术可以应用于程序式建模(如地形、植物)、程序式动画(如粒子特效、云层变化)、游戏逻辑(如刚体物理)、人工智能(如非玩家角色的移动)……这《图灵程序设计丛书·代码本色:用编程模拟自然系统》作为这个领域的入门书籍,使用了简易的Processing编程语言作为例子,非专业程序员也会很容易理解。”
  ——叶劲峰,知名游戏程序员,《游戏引擎架构》译者
  
  ★“很多编程书读起来味同嚼蜡,大多数的编程课程同样枯燥无趣。这《图灵程序设计丛书·代码本色:用编程模拟自然系统》却是趣味横生。每一章都快速全面地介绍一个有趣主题,而这些主题介绍得还相当深入。遗传算法、神经网络,等等,哇!这些主题通常一个就需要至少一《图灵程序设计丛书·代码本色:用编程模拟自然系统》的篇幅来讲解。《图灵程序设计丛书·代码本色:用编程模拟自然系统》给出了我目前所知最深入浅出的数学解释。”
  ——一位从事编程20余年的程序员
  
  ★“2012年春天,我在NYUITP读研究生时上过DanielShiffman的NatureofCode课,渐进式学习了他讲授的全部内容,现在重读这《图灵程序设计丛书·代码本色:用编程模拟自然系统》更是让我惊叹。我会向任何对运动、物理、可编程艺术、游戏等感兴趣的人强烈推荐这《图灵程序设计丛书·代码本色:用编程模拟自然系统》。……总之,这《图灵程序设计丛书·代码本色:用编程模拟自然系统》绝对值得一读,所有艺术家/设计师/码农的书架上都应该有一本!”
  ——纽约大学NatureofCode课程学生
  
  ★“很久很久以前,我在Director中用Lingo做Shockwave游戏编程。那时,我经常在深夜花费大量时间,上网搜寻关于‘转动惯量’之类的文章,最后写出的代码经常是超级繁琐而且缺陷很多。……而在阅读这《图灵程序设计丛书·代码本色:用编程模拟自然系统》五分钟之后,我得到的‘啊哈,原来应该这么实现’的顿悟,比当初五年的钻研所得到的还要多!”
  ——资深Shockwave游戏设计师

目录

第0章引言
0.1随机游走
0.2随机游走类
0.3概率和非均匀分布
0.4随机数的正态分布
0.5自定义分布的随机数
0.6Perlin噪声(一种更平滑的算法)
0.6.1映射噪声
0.6.2二维噪声
0.7前进

第1章向量
1.1向量
1.2Processing中的向量
1.3向量的加法
1.4更多的向量运算
1.4.1向量的减法
1.4.2向量加减法的运算律
1.4.3向量的乘法
1.4.4更多的向量运算律
1.5向量的长度
1.6单位化向量
1.7向量的运动:速度
1.8向量的运动:加速度
1.9静态函数和非静态函数
1.10加速度的交互

第2章力
2.1力和牛顿运动定律
2.1.1牛顿第一运动定律
2.1.2牛顿第三运动定律
2.1.3牛顿第三运动定律(从Processing的角度表述)
2.2力和Processing的结合:将牛顿第二运动定律作为一个函数
2.3力的累加
2.4处理质量
2.5制造外力
2.6地球引力和力的建模
2.7摩擦力
2.8空气和流体阻力
2.9引力
2.10万有引(斥)力

第3章振荡
3.1角度
3.2角运动
3.3三角函数
3.4指向运动的方向
3.5极坐标系和笛卡儿坐标系
3.6振荡振幅和周期
3.7带有角速度的振荡
3.8波
3.9三角函数和力:钟摆
3.10弹力

第4章粒子系统
4.1为什么需要粒子系统
4.2单个粒子
4.3使用ArrayList
4.4粒子系统类
4.5由系统组成的系统
4.6继承和多态的简介
4.7继承基础
4.8用继承实现粒子类
4.9多态基础
4.10用多态实现粒子系统
4.11受力作用的粒子系统
4.12带排斥对象的粒子系统
4.13图像纹理和加法混合

第5章物理函数库
5.1Box2D及其适用性
5.2获取Processing中的Box2D
5.3Box2D基础
5.3.1SETUP
5.3.2DRAW
5.3.3Box2D世界的核心元素
5.4生活在Box2D的世界
5.5创建一个Box2D物体
5.5.1第1步:定义一个物体
5.5.2第2步:设置物体的定义
5.5.3第3步:创建物体
5.5.4第4步:为物体的初始状态设置其他属性
5.6三要素:物体、形状和夹具
5.6.1第1步:定义形状
5.6.2第2步:创建夹具
5.6.3第3步:用夹具将形状连接到物体上
5.7Box2D和Processing的结合
5.7.1第1步:在主程序(即setup()和draw()函数)中添加Box2D
5.7.2第2步:建立Processing盒子对象和Box2D物体对象之间的联系
5.8固定的Box2D对象
5.9弯曲的边界
5.9.1第1步:定义一个物体
5.9.2第2步:定义形状
5.9.3第3步:配置形状
5.9.4第4步:使用夹具将形状连接到物体上
5.10复杂的形状
5.11Box2D关节
5.11.1步骤1:确保有两个物体
5.11.2步骤2:定义关节
5.11.3步骤3:配置关节的属性
5.11.4步骤4:创建关节
5.12回到力的话题
5.13碰撞事件
5.13.1步骤1:Contact对象,你能否告诉我哪两个物体发生了碰撞
5.13.2步骤2:夹具对象,你能否告诉我你连接在哪个物体上
5.13.3步骤3:物体,你能否告诉我你连接在哪个粒子对象上
5.14小插曲:积分法
5.15toxiclibs的VerletPhysics物理库
5.15.1获取toxiclibs
5.15.2VerletPhysics的核心元素
5.15.3toxiclibs中的向量
5.15.4构建toxiclibs的物理世界
5.16toxiclibs中的粒子和弹簧
5.17整合代码:一个简单的交互式弹簧
5.18相连的系统I:绳子
5.19相连的系统II:力导向图
5.20吸引和排斥行为

第6章自治智能体
6.1内部的力
6.2车辆和转向
6.3转向力
6.4到达行为
6.5你的意图:所需速度
6.6流场
6.7点乘
6.8路径跟随
6.9多段路径跟随
6.10复杂系统
6.11群体行为(不要碰到对方)
6.12结合
6.13群集
6.14算法效率(为什么程序跑得这么慢)
6.15最后的几个注意事项:优化技巧
6.15.1长度的平方(或距离的平方)
6.15.2正弦余弦查询表
6.15.3创建不必要的PVector对象

第7章细胞自动机
7.1什么是细胞自动机
7.2初等细胞自动机
7.3如何编写初等细胞自动机
7.4绘制初等CA
7.5Wolfram分类
7.6生命游戏
7.7编写生命游戏
7.8面向对象的细胞实现
7.9传统CA的变化

第8章分形
8.1什么是分形
8.2递归
8.3用递归函数实现康托尔集
8.4科赫曲线和ArrayList技术
8.5树
8.6L系统

第9章代码的进化
9.1遗传算法:启发自真实现象
9.2为什么使用遗传算法
9.3达尔文的自然选择
9.4遗传算法,第一部分:创建种群
9.5遗传算法,第二部分:选择
9.6遗传算法,第三部分:繁殖
9.7创建种群的代码
9.7.1第1步:初始化种群
9.7.2第2步:选择
9.7.3第3步:繁殖
9.8遗传算法:整合代码
9.9遗传算法:创建自己的遗传算法
9.9.1第1点:更改变量
9.9.2第2点:适应度函数
9.9.3第3点:基因型和表现型
9.10力的进化:智能火箭
9.11智能火箭:整合代码
9.12交互式选择
9.13生态系统模拟
9.13.1基因型和表现型
9.13.2选择和繁殖


第10章神经网络
10.1人工神经网络:导论和应用
10.2感知器
10.3用感知器进行简单的模式识别
10.4实现感知器
10.5转向感知器
10.6还记得这是个"网络"吗
10.7神经网络图
10.8实现前馈动画
10.9结语
参考文献
索引

前言/序言

  这是一本什么书
  我在ITP教授一门名为“计算媒体导论”的课。在这门课中,学生主要学习一些编程基础知识(变量、条件语句、循环、对象和数组等)。除此之外,他们还学习如何使用基本元素(图像、像素、计算机视觉、组网、数据和3D等)开发交互式应用。课程内容以我之前写的入门书LearningProcessing为主,而《图灵程序设计丛书·代码本色:用编程模拟自然系统》是LearningProcessing的续篇。一旦你掌握了编程基础并且接触了形形色色的应用场景,接下来很可能就是深入研究某个特定的方向。举个例子,你可以专注于计算机视觉(比如阅读GregBorenstein写的MakingThingsSee等书)。当然,《图灵程序设计丛书·代码本色:用编程模拟自然系统》的内容只是众多发展方向之一,它只是延续了LearningProcessing,展示了Processing语言在算法和模拟方面的更高级编程技术。
  《图灵程序设计丛书·代码本色:用编程模拟自然系统》的目标非常简单:我们想看看真实世界中发生的各种自然现象,以及如何通过编程对它们进行模拟。
  那这到底是一本什么样的书?这是不是一本有关科学的书?我可以很肯定地回答:不是。事实上,我们确实会涉及物理学和生物学的个别话题,但不会从严谨的学术层面进行研究,因为这不在《图灵程序设计丛书·代码本色:用编程模拟自然系统》讲述范围之内。相反,我们会简单探讨某些科学原理,只攫取我们需要的那一部分内容,并根据它们构建相关的示例程序。
  那这是不是一本有关艺术或设计的书呢?我还是会回答:不是。尽管我们的工作结果都是视觉上可见的事物(用Processing开发的演示动画),但也仅仅是用简单的图形和色彩做出的演示,我们真正专注的是它们背后的算法和相关编程技术。然而,我还是希望艺术工作者和设计师们能将《图灵程序设计丛书·代码本色:用编程模拟自然系统》中的知识融入工作实践,创造一些真正新颖有趣的作品。
  如果非要给这《图灵程序设计丛书·代码本色:用编程模拟自然系统》归类,我觉得它只是一本普普通通的编程书。尽管书中的一些章节取材自科学原理(比如牛顿物理学、细胞生长、进化等),而且一些编程结果会激发艺术创作的灵感,但归根结底《图灵程序设计丛书·代码本色:用编程模拟自然系统》重心是代码的实现,尤其是其中的面向对象编程技术。
  关于Processing语言
  《图灵程序设计丛书·代码本色:用编程模拟自然系统》使用Processing语言,原因有很多。第一,它是我用着最舒服的编程语言和开发环境,我很喜欢用它来工作;第二,它是免费开源的,并且非常适合初学者,它的开发者社区很活跃。对很多人来说,Processing或许是他们学习的第一门编程语言。因此,我希望这《图灵程序设计丛书·代码本色:用编程模拟自然系统》能拥有广泛的受众,并希望通过Processing用一种友好的方式阐述其中的原理。
  《图灵程序设计丛书·代码本色:用编程模拟自然系统》中所写的例子并不严格限定于Processing语言,我们还可以用ActionScript、JavaScript、Java(脱离Processing开发环境),或是其他开源的“创意编程”开发环境,比如openFrameworks、Cinder,以及最近发布的pocode。我希望自己完成这《图灵程序设计丛书·代码本色:用编程模拟自然系统》之后,能将《图灵程序设计丛书·代码本色:用编程模拟自然系统》中的例子移植到其他开发环境中,并发布其他语言的示例程序。如果你对移植《图灵程序设计丛书·代码本色:用编程模拟自然系统》的示例程序感兴趣,请随时联系我(daniel@shiffman.net)。
  《图灵程序设计丛书·代码本色:用编程模拟自然系统》中的所有示例都已在Processing2.0b6版本上测试通过,大部分例子也兼容早期版本。我会时常更新这些示例,使它们兼容最新版本。
  ……

其他推荐