游戏开发物理学 第2版(txt+pdf+epub+mobi电子书下载)


发布时间:2020-06-03 13:08:03

点击下载

作者:[美]David M Bourg 布尔格,Bryan Bywalec 布尔莱克

出版社:人民邮电出版社

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

游戏开发物理学 第2版

游戏开发物理学 第2版试读:

前言

谁适合读这本书?

简单来说,这本书是专为那些没有扎实的物理或机械基础的游戏开发者编写的。特别是他们要在游戏中加入真实物理(real physics)时。

作为一个游戏开发者,很可能你自己也是个玩家,你通常会看到游戏产品标榜自己“超写实(ultra-realistic)”,或者直接描述成“现实世界物理(real-world physics)”。同时,你或者你的公司市场部想知道如何对你们的游戏进行测试才能获得这样逼真的效果。又或许你想要尝试一些全新的、需要了解真实物理的游戏。那么现在唯一的问题就是:你大学物理期末考试之后就把教科书扔到湖里了,从那之后再也没碰过这门课。可能你有个相当酷的物理引擎许可证,但是你对于它最基础的工作原理毫无头绪,也不知道这些原理如何影响着你的建模。又或许你被委派了一项任务,需要用到别人写的物理代码,但是你完全无法理解它是如何运作的。擦亮眼睛看这边,本书就是为你编写的!

你可以在互联网、期刊、杂志上找到讲解怎样把物理添加到游戏中的相关教程,你甚至可以把已经丢到湖里的那本物理教科书捞出来然后从头开始啃。但是,你会发现这些东西要么泛泛而谈让你没法下手,要么讲得太深入让你必须找些参考资料研读。本书会将你需要的信息汇集起来,为你提供一个恰到好处的起点,把物理学融入你的游戏。

这本书并不像那些实例书,仅仅给你一些解决各种纷杂问题的示例代码。互联网上这种程序的例子非常多(我们可能将其中一些非常好的例子加入书中)。比起给你一系列解决特定问题的方案,我们的目标是让你对相关主题有一个深入浅出的了解,这样你就可以对一些问题列出你自己的解决方法。我们会针对将物理原理应用于游戏这一过程进行详细的解释,并在示例程序之外提供一些附加的手工计算例子来达到目标。我们假设你已经知道的知识

虽然我们不会假设你是一个物理学专家,但是我们还是认为你对经典物理学至少有非物理或非工程专业的大学程度的理解。你脑子里的背景知识的新鲜程度并不重要,因为本书前几章会用来复习与游戏中物理相关的主题。

我们还假设你精通三角函数、向量和矩阵数学,不过我们还是在附录中加入了参考材料。此外,我们假定你至少能达到理解基本的大学微积分的水平,包括显函数的积分与微分。当然,数值积分和数值微分是另一回事,我们将在本书的后几章详细探讨这些技术。力学

当我们正在构思这本书的概念时,我们跟别人谈到“真实物理”和“实时仿真”这些词,多数人马上就想到了飞行模拟器。当然前沿的飞行模拟肯定包含于其中,然而,很多不同类型的游戏和特定游戏元素,同样可以得益于基于物理学的真实。

考虑这个例子:接下来你正在处理的能够一鸣惊人的狩猎游戏,它拥有第一人称三维视角,美丽的纹理和一个绝赞的音轨来营造情绪,但还是缺点什么东西。它所欠缺的就是真实性。具体来说,你想要通过挑战玩家的枪法来让游戏“感觉”更真实。为此你会想要加入一些考虑因素,例如到目标的距离,风速和风向,子弹的初速等。

此外,你不想伪造这些元素,而是想根据物理学原理来真实模拟它们。MathEngine Plc公司的Gary Powell说过:“由多面体模型、详细的纹理和先进的照明构建出的虚拟世界的幻象和沉浸感,通常会在[1]其中物体开始移动和交互时就瞬间崩塌。“”真实感其实就是互动性和和沉浸感,”Havok.com网站的CEO Steven Collins博士如是说[2]。我们认为,这两位都一语中的。为什么在投资了这么多时间和精力,让你的游戏世界看起来尽可能逼真之后,不再多走一步让它的行为也像现实一样?

下面的例子是使用真实的物理让游戏在真实感方面受益的几个具体的游戏元素:

火箭和导弹的轨迹,包括燃料燃烧的影响。

物体的碰撞,例如台球。

大的物体之间引力的影响,例如行星和战斗空间站。

赛车急转弯时的稳定性。

快艇等水上交通工具的动力学。

棒球被球棒击打后的飞行轨迹。

扑克牌被扔进帽子的飞行轨迹。

这决不是一个详尽的清单,而只是几个例子。可以这么说,它们是为了让你在头脑中有一个正确的框架。在游戏中几乎任何跳来跳去,飞行的,滚动的,滑动的,或者只要不是死坐在那不动的东西,都可以实现真实的建模,为你的游戏加入引人注目且令人信以为真的内容。

那么,如何实现这种真实感?当然是通过使用物理学,这也就这把我们带回到本部分的标题:力学。物理学在科学中是一个广阔的领域,涵盖了许多不同而又相关的科目。最适用于现实的游戏内容的科目是力学,也就是我们所说“真实物理”的含义。

根据定义,力学是对物体静止、运动和受力的研究。力学可以被分为专注于静止物体的静力学(statics)和专注于运动物体的动力学(dynamics)。作为最古老和被研究得最多的物理学科之一,力学的正式起源可以追溯至两千多年前的亚里士多德。更早的对力学问题的处理可以追溯至Problems of Mechanics,不过其作者已不可考。虽然这些早期的研究中有部分将一些物理现象归因于魔法元素,但依旧有一批思想巨人为帮助我们加深对力学的理解做出了贡献,像伽利略、开普勒、欧拉、拉格朗日、达朗贝尔、牛顿和爱因斯坦等。正是因为他们的贡献如此之多,我们今天才能看到技术显著进步的情形。

当你希望你的游戏内容鲜活又生动,我们就需要将主要注意力放在运动物体上。因此,我们也将深入到动力学的细节部分。在动力学科目中,有更具体的科目需要进行研究,即运动学(kinematics)和动理学(kinetics)。运动学专注于物体的运动,而不考虑对物体起作用的力。而动理学既要考虑物体的运动,也要研究运动对物体的作用。本书中我们将详细探讨这两个课题。数码物理学

本书的第1版完全专注于机械学。在第1版出版十多年后,我们拓展了对于游戏物理学的定义——将数码物理学(digital physics)包[3]含了进来。这里的数码物理学并不是宇宙观意义上的物理学,而是与智能手机和它们独特的用户交互式体验相关的背景下的物理学。随着越来越多的诸如Wii、PlayStation、Xbox和智能手机等平台的面世和发展,开发者将需要跟上时代的步伐,搞清楚这些随着新平台而来的新输入技术和传感器技术,这样才能持续产出新的游戏体验。但是你并不用视其为负担,相反,可以将它们看成一个能够在你的游戏中增强用户交互式体验的机会。本书的结构

以物理为基础的现实对游戏来说并不新奇,事实上最近许多上架的游戏都在宣传它们的物理引擎。另外,许多三维建模和动画工具都内置有物理引擎来帮助使用者逼真地动画化特定的运动类型。当然,也时不时会有些杂志文章在各个方面讨论基于物理的游戏内容。同时,[4]在不同的层面上,研究实时刚体仿真的领域已经活跃了多年,技术期刊充满了从各个方面处理这个问题的论文。你可以找到从仿真多个连接的刚体到仿真布料的论文。然而,虽然这些是迷人的主题和宝贵的资源,正如我们前面所提到的,对于其中大部分内容,游戏开发者都只能有限地直接使用,因为它们需要你首先对需要应用的主题有深刻的理解,而这就需要你从其他渠道了解基础知识。此外,其中许多内容主要致力于研究运动方程的数学原理,并不强调实践中处理作用于物体上的力和仿真系统的问题。

我们问Animats公司的John Nagle,游戏里基于物理的仿真在开发过程中最困难的是哪部分,他觉得是编写出数值稳定、健壮的代码。[5]Gary Powell也回答了这个问题,他对我说最小化参数调整的数量以生成稳定的、真实的行为是最难的挑战之一。我们同意,在处理运动中物体数学问题时的速度和健壮性是一个仿真器的关键元素。在这之上,摆在首位的是启动和延续模拟的交互力呈现的完整性和准确性。正如你稍后在本书中可以看到的,力主宰着你仿真中物体的行为,如果你的物体想要表现的真实,你需要对它们进行精确的建模。

这也就决定了对于机械学的理解和会作用于特定物体或系统的力的真实世界特性主导着本书的结构。总体上说,本书分为四部分,每部分都基于前一部分涵盖的材料:

第一部分  基础

力学的复习,包含第1章至第6章

第1章 基本概念

这个热身章节涵盖了本书所用和引用到的基本原理。具体涉及的主题包括质量和质心、牛顿定律、惯性、单位和测量以及向量。

第2章 运动学

本章涉及的主题包括线性速度、角速度、加速度、动量以及粒子和刚体在二维空间和三维空间的一般运动。

第3章 力学

作为从运动学到动理学的桥梁,本章涵盖了力和力矩的原理。同时,本章还讨论了一些一般的力,包括阻力、力场和压力。

第4章 动理学

本章将结合第2章和第3章的要素,以应对动理学的问题,并解释了运动学和动理学之间的差异。并在进一步的讨论中将粒子的动理学问题放置到二维空间和三维空间中。

第5章 碰撞

本章我们涵盖了粒子和刚体碰撞的反应,即两个物体碰到对方后发生了什么。

第6章 抛体

本章将重点讨论简单抛射的物理过程,为在以后的章节中进一步处理具体的建模奠定基础工作。

第二部分 刚体动力学

介绍了实时仿真,包含第7章至第14章

第7章 实时仿真

本章将会介绍实时仿真,并详细讲解这种仿真的核心——数值积分器(numerical integrator)。在本章中我们将会介绍许多方法,并介绍它们的稳定性和调试。

第8章 粒子

在深入刚体仿真之前,本章将会展示如何实现粒子仿真。本章的知识将会在下一章扩展至刚体。

第9章 2D刚体仿真

本章将会扩展前一章的粒子仿真,展示如何实现刚体仿真。刚体仿真主要加入了转动并处理惯性张量。

第10章 实现碰撞响应

本章将会结合碰撞检测和碰撞响应来在二维仿真中实现一个实时碰撞功能。

第11章 3D刚体仿真中的转动

本章将会介绍刚体的三维转动,包括如何处理惯性张量。接下来我们将会向读者介绍如何将二维仿真扩展至三维。

第12章 3D刚体仿真

本章将在仿真器中模拟多个无连接的刚体纳入本章内容。引入多个物体需要处理一个很棘手的问题,即多个刚体碰撞的问题。本章还将讨论碰撞中稳定感和真实感的问题。

第13章 连接物体

让我们再进一步,在本章中将会展示如何将刚体连接,形成连接的物体。这样就可以用来模拟例如人体、会被炸开的复杂汽车结构和其他游戏中的物体。本章将会考虑很多种类的连接器。

第14章 物理引擎

在本章中,介绍了机动车受力的一些方面,包括空气动力学、滚动阻力、滑行距离、公路停车。

第三部分 物理模型

这部分处理一些真实世界的问题,包括第15至第19章。

第15章 飞机

本章主要介绍飞行中的元素,包括推进力、阻力、几何学、质量以及最重要的升力。

第16章 船舶

本章讨论了漂浮载具的基本属性,包括漂浮、稳定性、体积、阻力和速度。

第17章 汽车和气垫船

在本章中,介绍了机动车性能的一些方面,包括空气动力学、滚动阻力、滑行距离、公路停车。另外,气垫船同时拥有船和汽车的一些特性。本章将会用这些特性将气垫船作为一种独特的载具。涉及的主题包括悬浮飞行、空气静升力和方向控制。

第18章 枪支和爆炸

本章主要将注意力放在枪的物理特性上,例如火力、后坐力、抛体的飞行。由于一般我们期望物体被一个大的抛体撞到时会爆炸,因此我们在本章中还会讲解爆炸的物理特性,并对爆炸进行建模。

第19章 运动

本章主要将注意力放在球类运动,例如棒球、高尔夫和网球的物理特性上。本章内容将超出抛体物理的部分,将包括诸如投球、摆动球棒、球棒与球的冲击,高尔夫挥杆和球杆与球的冲击,加上网球拍摆动和球拍/球的影响等主题。

第四部分 数码物理学

本书这一部分的章节将会解释加速度计、触摸屏、GPS等小零件背后的物理学,并向读者展示如何在他们的游戏中充分利用这些元素。这部分包括第20章至第26章。

第20章 触摸屏

触摸屏使得移动设备上游戏的虚拟触摸接口变得方便,例如那些为iPhone制作的游戏。本章将解释触摸屏的物理特性以及读者如何能在他们自己的游戏中充分利用这一接口,尤其是在那些通过手势来进行虚拟物理交互的游戏。

第21章 加速度计

加速度计现在被广泛地应用于移动设备和游戏控制器中,它令玩家可以与游戏中的物体进行虚拟物理交互。本章将阐明加速度计是如何工作的,它们提供什么数据以及在与游戏元素进行虚拟物理交互的过程中如何处理这些数据。本章主题将涵盖但不限于通过加速度数据计算出设备的速度、位移和转动。

第22章 从这里到那里的游戏

移动设备通常都有GPS功能,本章将会阐述GPS系统的物理特性,包括相对论效应。此外,本章将会解释GPS数据,并向读者展示在与游戏元素的虚拟交互过程中如何处理这些数据。

第23章 压力传感器和称重传感器

压力传感设备在游戏中是一种让玩家与游戏元素交互的手段,例如:Wii平衡板采用压力传感器使得玩家与Wii Fit游戏互动。本章将解释这些压力传感器背后的物理特性:它们产生什么样的数据以及如何处理这些数据进行游戏互动。

第24章 3D显示

正如电视和许多游戏控制台正在争相实现三维显示,许多不同的技术正在被开发出来。通过了解依赖眼镜的立体显示、新的“无眼镜”自动立体显示和未来的全息及立体面显示背后的物理原理,开发者将会能够更好地在他们的游戏中利用这些效果。

第25章 光学追踪

新的PlayStation Move和微软的Kinect使用光学追踪系统来侦测玩家游戏控制器的位置或者手势。本章将会阐述光学追踪背后的物理原理,并说明如何在游戏中充分利用它。

第26章 声音

声音是游戏的浸入式体验中尤为重要的一环,但是至今为止关于游戏中物理学的书没有提到过声音。本章将主要注意力集中于声音的物理特性,包括声速、多普勒效应这些主题。同时,也会包括关于为什么有关于声音的物体特性经常被游戏所忽略的讨论,例如模拟在外太空中的爆炸。

附录A 向量运算

本节附录将会展示如何实现一个用来处理向量运算的C++类,它拥有你在编写2D或者3D仿真时需要的所有内容。

附录B 矩阵运算

本节附录将会实现一个类,它拥有你需要的用来处理3×3矩阵运算的所有内容。

附录C 四元数运算

本节附录实现了一个类,它拥有所有你需要的内容,用来编写三维刚体模拟时会用到的四元数的运算。

第一部分,基础,侧重于牛顿力学等运动学和动力学的基本主题。运动学处理物体的运动。我们将在其中讨论线性速度、角速度和加速度。动理学处理力和力产生的运动。第二部分以第一部分作为前提,涵盖了刚体动力学。已经精通经典力学的读者可以跳过第一部分而不影响阅读的连续性。

第二部分,刚体动力学,专注于刚体动力学和单物体及多物体仿真的开发。这部分覆盖了数值积分、粒子和刚体的实时仿真及多刚体连接的场景。基本上,这部分覆盖了游戏引擎中的大部分元素。

第三部分,物理建模,专注于物理建模。这部分的目的是提供有价值的物理视角,这样你就可以在建模时做更加明智的取舍。我们不可能也没有打算覆盖所有你可能建模的物体。相反,我们覆盖了几种你可能在游戏中使用的典型(typical)物体,例如飞机、船舶、球类等。通过对这些物体的讲解,使你了解到它们的物理本质和一些可用的建模选项。

第四部分,数码物理学,包括广义上的数码物理学。这是一个激动人心的主题,因为它将技术问题与如iPhone这样的只能与手机移动平台联系起来以及为如Wii这样的游戏系统奠基。这部分书中的章节将会解释加速度计、触摸屏、GPS和其他传感器背后的物理,向你展示如何在你的游戏中充分利用这些元素。我们同意这些主题并不是大多数游戏程序员想到游戏物理时通常会想到的东西。但是,这些技术在现代移动游戏中扮演着越来越重要的角色,因此我们感到解释支撑它们的物理学很重要,并期望你能够在游戏中更好地利用这些技术。

除了这些关于实时仿真的资源,本书末尾的参考文献章节会提供机械学、数学和其他专业技术学科的资源,例如空气动力学书籍。本书中所使用的约定

本书中使用了如下排版约定:

固定宽度(Constant width)

用于标示计算机命令行输出、示例代码、注册表项和键盘快捷键(见本书后面的“键盘快捷键”)。

等宽斜体(Constant width italic)

用来标示示例代码中的变量

斜体(Italic)

引入新的术语,也用于标示URL、变量、文件名、文件夹名、命令和文件扩展名。

粗体(Bold)

标示向量变量。

该图标表示提示、建议或一般的注释。

该图标标示了一个警告或者提醒。

我们用粗体字表示一个向量,例如力F当仅指向量的大小时,我们使用标准字体。例如,力向量F沿各坐标轴的分量的大小,Fx,Fy和Fz。在整本书的示例代码中,我们根据上下文的运算,使用 * (星号)表示向量的点乘,或标量积,使用 ^ (插入符号)来表示向量的叉乘。使用示例代码

这本书的目的是帮助你完成你的工作。一般来说,如果这本书包括代码示例,你可以在你的程序和文档中使用代码。你不需要与我们联系获取许可,除非你直接复制代码的显著部分。例如,编写一个使用本书中几段代码的程序不需要申请许可。贩卖或以CD-ROM分发 O’Reilly的书籍中的示例代码,则需要许可。引用本书内容和引用示例代码来回答问题不需要许可。将大量本书中的示例代码加入你的产品文档则需要获取许可。

我们欢迎但不强制要求引用。引用通常包含标题、作者、出版社和ISBN。例如,“Physics for Game Developers, 2nd Edition by David M. Bourg and Bryan Bywalec (O’Reilly). Copyright 2013 David M. Bourg and Bryan Bywalec, 978-1-449-39251-2.”

如果你觉得你对代码的使用方式超出合理使用范围或超出了上方所给出的权限,请随时与我们联系,邮箱:permissions@oreilly.com。Safari® 在线书店

Safari在线书店(www.safaribooksonline.com) 是一家按需收费的数字图书馆,这里提供来自世界顶尖的技术和商务作家的,拥有专业内容的图书和视频,技术专家、软件开发者、互联网设计师、商务人士和其他拥有创造力的专业人士们都在用Safari在线书店作为他们研究、解决问题、学习和认证培训时的主要素材。

Safari在线书店为组织、政府机构和个人提供多种不同的产品和价目。订阅者可以在一个拥有完善搜索功能的数据库中访问上千本书籍、培训视频和未发布的手稿。这些数据来自诸如O’Reilly Media、Prentice Hall Professional、Addison-Wesley Professional、Microsoft Press、Sams、Que、Peachpit Press、Focal Press、Cisco Press、John Wiley & Sons、Syngress、Morgan Kaufmann、IBM Redbooks、Packt、Adobe Press、FT Press、Apress、Manning、 New Riders、McGraw-Hill、Jones & Bartlett、Course Technology 等机构。了解更多信息,请在线浏览Safari在线书店。联系我们

请将关于本书的评论和问题提交给出版商:

美国:

O’Reilly Media, Inc.

1005 Gravenstein Highway North

Sebastopol, CA 95472

中国:

北京市西城区西直门南大街2号成铭大厦C座807室(100035)

奥莱利技术咨询(北京)有限公司

我们为这本书创建了网页,在页面上提供勘误表、例子以及所有的附加信息。

你可以通过http://oreil.ly/Physics-GameDev2来访问这个网页。

如果需要对本书评论或提出技术问题,请发邮件至bookquestions@oreilly.com。

如果需要了解更多我们所提供的书籍、课程、会议和新闻,请参阅我们的网站http://www.oreilly.com。

在Facebook上找到我们:http://facebook.com/oreilly。

在Twitter上关注我们:http://twitter.com/oreillymedia。

在YouTube上观看我们的视频:http://www.youtube.com/oreillymedia。致谢

我们要感谢本书本版的编辑Andy Oram,他不但细心,而且对我们作品进行了娴熟的审查,独具慧眼的评论和建议。我们也想表达我们对O’Reilly的谢意,他同意我们进行这个项目,给我们以机会来扩充第1版。此外,特别感谢所有在O’Reilly的生产人员和技术人员。

我们也要感谢作为技术审稿人的Christian Stober 和 Paul Zirkle,他们的优秀的洞察力为本版书提供了许多帮助。

从个人方面来说,David 想要感谢Helena。Helena作为他所爱的妻子和他最好的朋友,提供了大量的支持和鼓励。同时还要感谢他最棒的女儿Natalia让每一天都变得特别。

Bryan想要感谢他的合著者David提供帮助第2版编著的机会。同时,Bryan也想要感谢他的父母Barry和Sharon培养了他对世界的好奇心。最后,他希望感谢他的未婚妻Anne Hasuly,如果没有她的帮助,许多章节到现在仍然只会是半成品。

[1]在本书第1版出版时,Gary Powell为MathEngine Plc公司工作。该公司的产品包括Dynamics Toolkit 2 和 Collision Toolkit 1,它们处理单个和多个物体的运动学。现在公司在CM Lab的名义下运作。

[2]在本书第1版出版时,Collins博士是Havok.com的CEO。该公司的技术处理的是刚体、软体、布料、流体和粒子动力学。Intel 在2005年收购了Havok。

[3]译者注:数码物理学(digital physics)或计算宇宙学(computational university)是一种理论,指宇宙可以用信息来代表,亦可被计算。宇宙可能只是疑似的计算和程序或数码模拟物。

[4]刚体正式的定义是一个由粒子系统组成的物体,其粒子之间保持固定距离并且不会有相对的位移或转动。虽然力学的主题同时还处理软体甚至像水这样的流体,我们会将注意力集中在刚体上。

[5]在本书第1版出版时,John Nagle是Falling Bodies的开发者,Falling Bodies是Softimage|3D的动力学插件。第一部分

第一部分侧重于牛顿力学等运动学和动力学的基本主题。运动学处理物体的运动,我们将在其中讨论线性速度、角速度和加速度。动力学处理力和力产生的运动。第二部分以第一部分作为前提,涵盖了刚体动力学。已经精通经典力学的读者可以跳过第一部分而不影响阅读的连续性。第1章 基本概念

作为热身,本章会涵盖大部分在以后的章节中会使用到的基本原理。首先,我们会介绍牛顿运动定律,它对于学习力学来说非常重要。然后我们会讨论单位和度量,并在这里阐述单位在计算中的重要性。你也会看到将要学习的几种物理量的相关单位。在讨论过单位之后,我们会定义通用的坐标系统以作为标准的参考系。然后会讨论质量、质心和转动惯量的概念,并展示对于物体的集合或者组合来说,如何计算上述这些量。最后我们会非常详细地讨论牛顿第二运动定律,快速地了解一下向量,并且简要地讨论一下相对论时间。1.1 牛顿运动定律

17世纪后期(1687年左右),艾萨克·牛顿爵士发表了他的力学哲学著作——《自然哲学的数学原理》(Philosophiae Naturalis Principia Mathematica)。在这篇作品中,牛顿陈述了著名的运动定律,总结如下:

定律1

每个物体都保持其静止、或匀速直线运动的状态,除非有外力作用于它迫使它改变那个状态。

定律2

运动的变化正比于外力,变化的方向沿外力作用的直线方向。

定律3

每一种作用都有一个相等的反作用;或者,两个物体的相互作用总是相等的,而且指向相反。

这些定律组成了大多数力学领域分析的基础。对于动力学来说特别值得注意的是第二定律,可以写成:

这里F是作用在物体上的合力,m是物体的质量,a是物体重心上的线加速度。在本章的后半部分,我们会详细讨论第二定律,但是在那之前我们必须解决一些基础问题。1.2 单位和度量

在多年不同的工程课程教授中,我们发现学生们经常犯的一个错误就是在计算的时候对一个量使用了错误的单位,因此无法保持单位的一致性,从而导致了一些很古怪的答案。举个例子,在船的性能领域,最常误用的就是速度的单位:人们经常会忘记把速度的单位从海里/小时转成米/秒(m/s)或者尺/秒(ft/s)。1海里/小时等于0.514m/s,考虑到这个领域的许多量都和速度的平方成正比,这个错误会导致最终的结果偏离目标185%!所以如果以后你的结果看起来可疑的话,你需要做的第一件事情就是回过头来看看你的公式,检查一下它们的量纲一致性(dimensional consistency)。

为了检查量纲一致性,你必须仔细看看你的度量单位和它们的分量量纲。我们不是在讨论2D、3D中所表达的那个维度的概念,而是那些基本的、可测量的量纲,这些量纲会衍生出我们后面会用到的一些不同的物理量的单位。这些基本的量纲是质量(mass),长度(length)和时间(time)。

了解这些量纲以及由它们组合、衍生出来的单位是很重要的,这样你才能保证计算中的量纲一致性。例如,你知道物体的重量是用力的单位来衡量的,而力可以分解为不同的分量量纲,如下所示:

其中M是质量、L是长度、T是时间。这个公式是不是看起来很熟2悉?如果你把(L/T)这个部分当做加速度,然后用符号a来表示加速度,用m符号来表示物体的质量,你将会得到:

这就是著名的牛顿第二定律(Newton’s second law of motion)的表达式。我们稍后将会对这个等式进行进一步的分析。

我们刚才所做的并不是推导出这个著名的公式。我们所做的只是检查它的量纲一致性(尽管是逆向检查)。以上所做的这些只是为了让你以后所写出的、用来表达力作用于物体上的表达式最好能够有统2一的(M)(L/T)形式的单位。现在看起来量纲一致性可能不算什么,但是,当你开始着眼于更加复杂的力作用与物体的公式时,你会发现可以把它们分解成分量量纲,从而检查它们量纲上的一致性。稍后我们会为我们的物理量使用真实的单位,这些单位来自国际单位制符号(SI,le Système international d’unités或International System of Units)。当然,也有其他的单位系统,但是除非你希望将这些值展示给你的玩家,否则你在游戏中使用哪种单位系统都无关紧要。再次强调,重要的是单位的一致性。

为了澄清这一点,考虑物体在像水这样的流体上移动时的阻力公式:

在这个公式中,R表示摩擦所产生的阻力(一种力),ρ是水的f密度,V是移动中物体的速度,S是物体淹没部分的表面积,C则是f物体经验(由实验得出)摩擦系数。现在,用基础量纲代替变量重写这个公式将会展示出公式左边的量纲与公式右边的量纲完全一样。由于R是力,它的基础量纲形如:f

之前所讨论过,右边所有项的量纲合并之后,一定是它的等价形式。考虑密度、速度和表面积的基础单位。3

密度:(M)/(L)

速度:(L)/(T)2

面积:(L)

合并这些项的量纲,ρVS,如下:2

将分子与分母中的量纲合并得如下形式:

消去同时出现在分子分母中的量纲得:

它与之前展示的阻力量纲一致。这个练习同样展示了摩擦系数项C,是无量纲的。也就是说,它是一个没有单位的常数。f

有了这些知识,让我们来看一些更加常用的物理量,你可能会用到它们所对应的符号、量纲、国际单位和英制单位。这些信息总结在表1-1中。表1-1 常用物理量和单位物理量符号量纲国际单位英制单位222线性加速度AL/Tm/sft/s222角加速度αradian/Tradian/sradian/s333密度ρM/Lkg/mslug/ft2力FM(L/T)newton,Npound,lb222运动黏度νL/Tm/sft/s长度L(或x、y、z)Lmeters,mfeet,ft质量mMkilogram,kgsluga22力矩M M(L/T)N-mft-lbs222转动惯量IMLkg-mlbs-ft-s222压力PM/(LT)N/mlbs/ft时间TTseconds,sseconds,s线性速度VL/Tm/sft/s角速度ωradian/Tradian/sradian/s22黏度μM/(LT)N s/mlbs·s/fta 一般地,我们使用大写的M表示作用于物体上的力

矩,而用小写的m来表示物体的质量。如果我们在提及一般

意义上质量的基础量纲(即,表示衍生出测量单位的量纲部

分时),会使用大写的M。通常,这些符号的意义在用到它

们的上下文中很明显。我们会在可能有歧义的地方指明它们

的意义。1.3 坐标系

在表示2D和3D空间中的点的时候,本书使用标准的右手(right-handed)笛卡尔坐标系统(Cartesian coordinate system)。在二维中我们使用图1-1(a)所示的坐标系统,在这个系统中定义逆时针转动为正方向。图1-1 右手坐标系

在三维中我们使用图1-1(b)中所示的坐标系统,在这个系统中x轴上转动的正方向是从正y到正z,y轴上转动的正方向是从正z到正x,z轴上的转动的正方向是从正x到正y。1.4 向量

让我们稍稍停一下,回到高中的数学课去回顾一下向量的概念。本质上来讲,向量是一个既有大小又有方向的量。与之相对的标量,与向量不同,只有大小没有方向。在力学中,力、速度、加速度和动量是向量,所以它们的大小和方向我们都需要考虑。距离、密度、黏度等都是标量。

至于标记符号,我们会使用粗体字来表示向量,例如力F。当只使用向量的大小的时候,使用标准字体。例如力向量F的大小部分是F,该F在不同的坐标轴上有各自的分量,F、F和F。在本书的代码xyz样例中,根据不同的上下文,使用*(星号)来表示向量的点乘,或者是标量的乘积,使用^(脱字符号)来表示向量的叉乘。

本书中大量地使用向量,所以读者最好能够回顾一下基本的向量运算,例如向量加法、点乘和叉乘。方便起见,附录A列出了一些基本的向量运算(这样你就不用翻出陈年的数学课本)。该附录提供了一个Vector类,其中包含了所有重要的数学功能。然后,我们会解释如何使用特定的向量运算(例如点乘和叉乘运算)来进行一些通用并很有用的计算。例如,在动力学中经常需要求平面或者接触面的垂直向量或者法向量(normal)。这个问题可以使用叉乘来解决。另外一个常见的计算是求一个点到空间中一个面的最短距离,这里可以使用点乘运算。在附录A中描述了如何通过向量计算得到上述两个问题的答案,在你开始钻研本书中的代码之前,我们建议你先复习一下附录A。1.5 微分和积分

即使你对微积分不熟悉,也不要让书中的微分和积分吓到你。在整本书中,当我们用微积分书写等式的时候,都会向你表明如何处理它们的运算。我们不会很深入地论述微分和积分所有的属性和应用,而只会触及它们的物理意义,因为这些与我们所要涵盖的材料有关。

你可以将微分想象成一个变量随另一个变量变化的速率,或者换种说法,微分告诉了你一个变量随另一个变量变化的有多快。以速度为例。一辆汽车以固定速度在固定时间内行驶过一段距离。它的平均速度是在特定时间间隔内行驶过的距离。如果它在一小时内行驶了60公里,那么它的平均速度就是60公里每小时。当我们仿真时,也就是你在本书后面将会看到的,我们会关注汽车在非常短的时间间隔内做了什么。由于时间间隔变得非常小,当我们考虑在这段非常短的时间段内汽车经过的距离时,我们看到的是瞬时速度(instantaneous speed)。我们通常将这种关系用符号表示如下:

其中v是速度、ds是一小段距离(微分(differential)距离)而dt是一小段时间(微分时间)。在现实中,对于我们的仿真来说,我们永远也没有机会处理无穷小的数,我们将会使用很小的数字,如1毫秒的时间间隔,而非无穷小。

出于我们的目的,你可以将积分想象成微分的逆向或者反向运算。积分法是微分法的逆运算。∫符号表示积分。你可以将积分想象成将变量的一些无穷小的块相加的过程。但是在这里我们处理的不是任何无穷小的东西,而是考虑将变量分为小的、离散的块,例如一小块离散的时间、面积或质量。在这些情况下,我们将会用Σ符号替换积分符号。考虑一块均匀切成细片的面包。如果你想要计算它的体积,你可以近似的从一端开始计算第一片的体积,通过将它近似为一个短的方柱体来计算体积。之后再计算第二片的体积并将它与第一片的体积相加。之后计算第三片、第四片等,同时在从一边向另一边计算时将体积加起来。积分将这一技术应用在无限薄的片上来计算任意形状的体积。同样的技术也应用于其他计算,例如,计算面积、惯性(inertias)、质量等,甚至如之后你会见到的,计算在小时间片上旅行过的距离之和。事实上,稍后的这个应用是使用距离对时间微分给出速度的逆运算。你稍后会看到,这样使用积分和微分可以在速度、加速度和行进过的距离之间来回转换。事实上我们会在本书中经常使用这些概念。1.6 质量、质心和转动惯量

物体的属性——质量(mass)、质心(center of mass)和转动惯量(moment of inertia),总体来讲被称为质量特性(mass properties)——对于研究力学来说是至关重要的,因为物体的线性运动、角运动及物体对于给定外力的响应都是质量特性的函数。因此,为了准确建模物体的运动,你需要知道或者有能力计算这些质量特性。让我们先看几个定义。

通常来讲,人们认为质量是用来衡量一个物体中含有物质的多少。从研究力学的角度来讲,也可以认为质量是用来衡量物体对于运动或者运动中的变化的阻力。因此物体的质量越大,就越难让它动起来,或者说越难改变它的运动状态。

在力学以外的术语中,质心(也被称为重心(center of gravity))是物体上的一个点,该物体的质量均匀的分布在质心的周围。在力学中,质心是这样一个点,当任何的外力施加在该点上的时候,都不会引起该物体的转动。

虽然大多数人熟悉质量(mass)和重心(center of gravity)这样的术语,但是转动惯量就没有那么熟悉了;然而在力学中,它们都是一样重要的。一个物体的转动惯量是当物体在一个坐标轴上的转动的时候,用来衡量该物体质量的放射性分布指标。质量是物体对于线性[1]运动的阻力,类比之下,可以认为转动惯量是用来衡量物体对转动的阻力的。

现在你已经知道这些属性是什么意思了,我们来看看如何计算它们。

对于由多部分组成的物体,总质量可以通过简单地把每个部分的质量加起来得到。每个部分的质量可以通过密度乘以体积得到。假设该物体的密度是统一的,那么该物体的总质量就可以简单地用密度乘以物体的总体积得到。这个可以使用下面的方程表示:

在实践中,你通常不需要做体积的积分来得到物体的质量,尤其是我们将要考虑的那些物体(例如汽车和飞机)的密度并不是均匀的。因此你可以把物体分解成为比较容易计算质量的部分,计算每个部分的质量,然后简单地把每个部分的质量加起来,从而得到总质量。

物体重心的计算更复杂点。首先,把物体分为有限个基本的质块,每个质块的中心使用参考坐标系的轴来定位,使用m来引用这些质i块。接下来取每个质块的相对于参考坐标轴的一阶距(first moment),再把它们加起来。一阶距求解方法如下:先得到沿着某个给定的坐标轴从原点到质块中心的距离,该距离与该质块质量的乘积即为一阶距。最后把所有质块的一阶距的和除以物体总质量,就可以得到该坐标轴上的物体质心的坐标。你必须对每个维度都做这样的计算,也就是说,对2D做两次计算,对3D做三次计算。下面是物体质心3D坐标的方程。

其中(x,y,z)是物体质心的坐标,而(x,y,z)是每个质co块的质心坐标。量xdm、ydm和zdm表示质块质量dm关于坐标轴的ooo一阶距。

这里,不用太担心这些积分方程。在实践中你只需将有限的质量相加,方程看起来会友好很多,如下所示:

注意,你可以轻易地将这些方程中的质量替换为重量,因为重力加速度g会同时出现在分子和分母中,因此会从等式中消去。记住,2物体的重量就是它的质量乘以重力加速度g,g在海平面为9.8 m/s。

计算物体总质量和离散粒子系统重心的方程可以很方便地写作向量符号形式如下:

其中m是总质量,m是每个系统中每个粒子的质量,CG是合并ti后的重心,而cg是每个粒子在设计或参考坐标下的重心。注意CG和icg是向量,因为它们表示笛卡尔坐标系中的位置。这样做是为了方i便你能够一次处理x、y、和z(或者在二维中的x和y)。

在稍后的示例代码中,让我们假设组成物体的粒子由一种数据结构组成的数组表示,每个这种数据结构都包含对应点粒子的设计坐标和质量。这个数据结构同样会包含稍后计算的粒子相对于组合后刚体质心的坐标。

这里是示范如何计算总质量以及合并元素重心的代码:

现在解出了合并后的重心位置,你就可以计算每个粒子的相对位置如下:

为了计算转动惯量,你需要取组成物体的每个粒子对于每条坐标轴的二阶矩。之后用所得二阶矩乘以质量与距离平方的积。这个距离不是沿计算质心时的坐标轴到粒子中心的距离,而是从我们计算转动惯量相对的坐标到粒子中心的垂直距离。

三维中的任意物体如图1-2所示,当计算对于x轴的转动惯量Ixx222时,距离r将会在yz平面上,rx=y+z。同样的,对于关于y轴的转x22222动惯量 I,r y = y + z,而对于关于z轴的转动惯量I,r z = y + yyzz2z。图1-2 三维空间中的物体

三维中相对于坐标轴的转动惯量方程为:

让我们看一眼实际中矩的更通常的情况。假设给定物体对于穿过物体质心的中性轴(neutral axis)的转动惯量为I,而你想知道对于o平行与这个中性轴但有一定距离的另一个轴的转动惯量I,你可以使用坐标变换,或者平行轴定理(parallel axis theorem)来确定对于这个新轴的转动惯量。需要使用的公式如下:

其中m是物体的质量,而d是两轴之间的垂直距离。

这里有一个重要的实用观测:新的转动惯量是两坐标轴分开距离平方的函数。这表明当I比较小而d比较大时,你可以安全地忽略I,oo2因为md项将占主导地位。当然,在这里你需要尽力判断。这个用于变换坐标轴的公式同时表明了物体的转动惯量在相对于过物体重心的轴计算时最小。物体对于任何不通过物体质心的平行轴的转动惯量将2会增大md。

在实践中,除了对密度均匀的简单形状,计算转动惯量都是一个很复杂费力的过程,因此我们通常会将物体对于一个过其质心的转动惯量使用近似物体的基础形状的公式来进行近似求解。进一步,我们2会将复杂物体分成小组件,并利用某些组件的I相对于其md对于整o个物体转动惯量的可以忽略的特性简化计算。

图1-3到图1-7展示了一些能够轻松地计算转动惯量的简单几何实体。在图题中展示了这些简单密度均匀的几何体相对于三个坐标轴的转动惯量公式。你可以轻易地在大学动力学教材中找到其他基础几何体的类似公式。222图1-3 圆柱体:I = I =(1/4)mr +(1/12)ml;I =(1/2)mrxxyyzz222图1-4 圆柱体壳:I = I =(1/2)mr +(1/12)ml; I = mrxxyyzz22222图1-5 立方柱体:I =(1/12)m(a + l); I =(1/12)m(b + l);I =(1/12)m(a + xxyyzz2b)2图1-6 球体:I = I = I =(2/5)mrxxyyzz2图1-7 球壳:I = I = I =(2/3)mrxxyyzz

正如你所见到的,这些公式实现起来相对简单。这里用到的技巧就是将一个复杂物体分为一系列小而简单的有代表性的几何形,它们组合起来会近似于复杂物体的惯性属性。这个联系很大程度上是一种考虑期望精度水平的判断。

让我们通过一个简单的2D示例来展示如何应用本节中讨论过的公式。假设你正在编写一个自顶向下视图的自动赛车游戏,想在其中使用基于2D刚体动力学仿真汽车精灵。在游戏最开始,玩家的汽车处于起跑线,加满油并准备出发。在开始仿真之前,你需要计算初始状态时车、司机和燃料载重的质量特性。在这个例子中,物体(body)由三部分组成:车、司机和满载的燃料。之后在游戏中,物体的质量会随着燃料燃烧和司机在车祸中被甩出去变化。现在,让我们只注意图1-8所示的初始状态。

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载