计算机图形学几何工具算法详解
基本信息
- 作者: (美)Philip J.Schneider,David H.Eberly [作译者介绍]
- 译者: 周长发
- 丛书名: 计算机专业人员书库
- 出版社:电子工业出版社
- ISBN:7121005158
- 上架时间:2005-1-17
- 出版日期:2005 年1月
- 开本:16开
- 页码:734
- 版次:1-1
- 所属分类:
计算机 > 计算机科学理论与基础知识 > 图形学
内容简介回到顶部↑
程序设计人员工作一个小时的价值通常高于本书的价格。从这个意义来说,你拥有了一本潜在价值为数千美元的书籍。花费这一价值的一小部分即可购得本书,这真是一个现代的奇迹。本书包含了令人难以置信的信息量!
——Eric Haines
本书特色
● 包含了大量健壮的算法,将节省你的时间,并帮你避免代价昂贵的错误。
● 涵盖了与二维和三维图形编程相关的各种问题。
● 每一个问题和解决方法都是独立论述的,只要阅读你需要的章节,就能得到所需的完整内容。
● 提供了帮你理解算法并将其用于实际工作所需的数学和几何背景知识。
● 清晰地图示每一个问题,并用易子理解的伪码来表示各种算法。
可在网站www.mkp.com/gtcg获得与本书相关的各种资源。
本书提供了计算机图形学基础问题的各种有效算法,以及相关的数学和几何背景知识,对计算机图形学和其他领域的二维和三维几何学问题进行了全面的解析和合理的组织。本书包括建立基础图元、距离计算、近似值处理、包含性分析、分解、相交确定、分离等方面的算法,对每一个问题都有清晰的论述和图示,并利用易于理解的伪码来表示各种完整详尽的算法。除此之外,本书还在多个附录中提供了丰富的参考资料。
本书适合作为计算机图形学几何算法课程的教材,也可作为参考指南,供经验丰富的业界人士参考查阅。
——Eric Haines
本书特色
● 包含了大量健壮的算法,将节省你的时间,并帮你避免代价昂贵的错误。
● 涵盖了与二维和三维图形编程相关的各种问题。
● 每一个问题和解决方法都是独立论述的,只要阅读你需要的章节,就能得到所需的完整内容。
● 提供了帮你理解算法并将其用于实际工作所需的数学和几何背景知识。
● 清晰地图示每一个问题,并用易子理解的伪码来表示各种算法。
可在网站www.mkp.com/gtcg获得与本书相关的各种资源。
本书提供了计算机图形学基础问题的各种有效算法,以及相关的数学和几何背景知识,对计算机图形学和其他领域的二维和三维几何学问题进行了全面的解析和合理的组织。本书包括建立基础图元、距离计算、近似值处理、包含性分析、分解、相交确定、分离等方面的算法,对每一个问题都有清晰的论述和图示,并利用易于理解的伪码来表示各种完整详尽的算法。除此之外,本书还在多个附录中提供了丰富的参考资料。
本书适合作为计算机图形学几何算法课程的教材,也可作为参考指南,供经验丰富的业界人士参考查阅。
作译者回到顶部↑
本书提供作译者介绍
Philip Schneider在沃特迪斯尼特色动画公司领导一个建模和动态模拟软件小组。在此之前,他曾在苹果公司和数字设备公司从事三维图形研究,研究领域涉及从底层接口到图形库和交互式应用的多个方面。他在华盛顿大学获得计算机科学专业的硕士学位。
David Eberly是魔法软件公司的总裁,也是实时三维游戏引擎“疯狂魔法”的设计师。在此之前,他曾是数值设计有限公司的工程总监,该公司发行了实时三维游戏引擎Netlmmerse。他在北卡罗莱纳州大学ChapelHill分校获得计算机科学专业的博士学位,在科罗.. << 查看详细
David Eberly是魔法软件公司的总裁,也是实时三维游戏引擎“疯狂魔法”的设计师。在此之前,他曾是数值设计有限公司的工程总监,该公司发行了实时三维游戏引擎Netlmmerse。他在北卡罗莱纳州大学ChapelHill分校获得计算机科学专业的博士学位,在科罗.. << 查看详细
目录回到顶部↑
第1章 绪论
1.1 如何使用本书
1.2 关于数值计算的若干问题
1.2.1 低层问题
1.2.2 高层问题
1.3 各章内容概要
第2章 矩阵和线性系统
2.1 导言
2.1.1 动机
2.1.2 组织
2.1.3 符号约定
2.2 多元组
2.2.1 定义
2.2.2 算术运算
2.3 矩阵
2.3.1 符号与术语
2.3.2 转置
2.3.3 算术运算
2.3.4 矩阵乘法
2.4 线性系统
1.1 如何使用本书
1.2 关于数值计算的若干问题
1.2.1 低层问题
1.2.2 高层问题
1.3 各章内容概要
第2章 矩阵和线性系统
2.1 导言
2.1.1 动机
2.1.2 组织
2.1.3 符号约定
2.2 多元组
2.2.1 定义
2.2.2 算术运算
2.3 矩阵
2.3.1 符号与术语
2.3.2 转置
2.3.3 算术运算
2.3.4 矩阵乘法
2.4 线性系统
前言回到顶部↑
快速而廉价的大众化图形硬件的出现,已经引起了人们对计算机图形学知识日渐热切的渴求,人们希望了解在计算机游戏、科学可视化、医学图像分析、仿真和虚拟世界等应用程序中如何编程实现各种各样的几何任务。各种应用程序的类型没有改变,但应用方向却利用技术的优势不断发展(Crawford 2002)。新的应用方向甚至已经包括以代码分析和可视化调试为目的的三维环境,以及政党联合形式的分析,即将政党的信念表示为不同的凸体,它们之间的相交表明潜在的联合性。
在书籍、Web站点、新闻组、期刊文章或行业杂志中,均可以找到许多关于图形的知识。有时这类资源容易理解,但更多的时候却显得晦涩难懂。有时它们提供了足够多的细节来阐明潜在的原理,但有时却没有提供细节。有时提出一个概念时考虑到了使用浮点运算时出现的数值问题,但在其他很多情形中,概念的提出仅仅局限在纯粹的理论层面上。有时甚至(特别是在一些在线文章中)表述都可能不正确。在查找这类资源,评价其适用性、有效性和正确性,以及将它们改编以适应你自己的需求等方面所花的时间远远超过在其他任务上所用的时间。本书就是针对这类问题而设计编写的。本书为你提供了许多在实际应用中经常遇到的二维和三维几何学算法,并对它们进行了全面的解析和合理的编排。我们之所以将这些算法称为几何工具算法,是因为这些算法和概念实际上是一些用来实现应用目标的工具。
本书所涉及的不同主题的难易程度相差很大。有的非常浅显,比如计算点到线段的距离:而有的又非常复杂,比如计算两个非凸的简单闭合多面体之间的相交。有些工具算法仅需用到向量代数中的若干简单概念。而其他很多工具算法却需要使用微积分中一些较高深的概念,比如函数的导数、水平集(levelsets)和使用拉格朗日乘子(Lagrange multipliers)的约束极小化(constrained minimization)。大多数书籍的重点一般都集中在某一部分章节,但我们编写的这本书却非如此。我们想使本书既适用于图形学领域的新手,也适用于经验丰富的老手。我们为需要复习向量和矩阵代数的读者提供了三章,简明地介绍了与本书相关的内容。本书提供了几个附录,其中一个附录简要地概述了三角几何的基本公式,还有一个附录涵盖了用于几何工具算法的各种不同的数值方法。
本书有两种使用方式。第一种是作为教科书使用。从某种意义上来说,本书介绍的内容是为传授算法的重要思想服务的,因此,本书适合作为大学图形学几何算法课程的教材。虽然本书没有为各章节配备练习,但本书提供了大量的伪码(pseudocode)。用一种实际的编程语言实现这些伪码就是非常合适的一组课程作业。这里引用一句著名的谚语:空谈不如实践。
本书的第二种使用方式是作为参考指南。关于算法的各章是按空间维来组织的,首先介绍二维的内容,然后再介绍三维的内容。只有关于计算几何学的那一章没有按维来组织,但它是作为独立的一章来编排的,这样也很合理。这种组织方式便于读者查找感兴趣的算法。用空间维来划分内容的尝试稍微增加了一些写作的代价。有些适用于任意维空间并且一般只需写作一次的内容现在被重复了。例如,点到线段的距离可以按不分空间维和自由坐标的方式来描述,然而我们选择了在二维和三维中分别讨论该问题的方式。我们认为,这种选择使各章节相对独立,因而可帮助读者避免一种通常的做法,即用许多的纸片粘贴于书的不同位置以便能快速翻到与手头的问题相关的所有章节。
在计算机科学书籍中包含可运行的源代码已经成为出版界的一种惯例。在大部分情形中,编写阐明书中概念的代码需要花费相当可观的时间。对于本书这种涵盖了庞大数量的算法的大型书籍来说,提供阐明所有算法的完整代码集是很不切实际的。因为即使对商业机构来说,这也是一个艰巨的任务。作为一种替代方案,我们在书中增加了尽可能多的伪码。参考文献中包括了许多提供或连接到算法实现的Web网站(在本书第一次印刷时都是有效的连接)的参考条目。其中提供了大量的算法实现的一个网站是www.magic-software.com,它的主机由魔术软件公司(Magic Software,Inc.)提供,DaveEbedy负责维护。可以从这个站点免费下载该网站提供的源代码。该网站还为本书建立了一个网页,即WWW.magic-software.com/GeometricTools.html,其中包含了与本书有关的信息、勘误表,以及代码更新历史(其中包括一些通知,说明了新增的源代码的有关信息和对老的源代码的错误更正)。网页www.mkp.com/gtcg中也提供了与本书相关的资源。
我们感谢本书的评审人员,Tomas Akenine-Moller(Chalmers University of Technology),Ian Ashdown(byHeart Consultants Limited),Eric Haines(Autodesk,Inc.),George Innis(Magic Software,Inc.),PeterLipson(ToysforBob,Inc.),JohnStone(University of lllinois),DanSunday(Johns Hopkins University)和Dennis Wenzel(True Matrix Software),以及技术编辑ParveenKaler(Simon Fraser University)。评审如此规模庞大且涵盖面广的书是困难的,然而他们的勤奋已经得到了回报。评审者的意见和批评已经帮助我们改进了本书许多方面的内容。我们特别感谢Peter和Dennis的意见,因为他们承担了审阅全书这一艰难的任务,并且对本书的几乎每一个方面都提出了详细的意见,既有关于细节的意见也有关于全局的意见。DavidM.Ebefie(Walt Disney Feature Animation)提供了若干章节的许多伪码和一些额外的技术评论,我们非常感谢他的帮助。我们也感谢我们的编辑Diane Cerra和她的助手Belinda Breyer,感谢她们帮助我们组编如此浩大的书籍所花费的时间,她们理解作者需要不断的鼓励才能完成如此巨量的工作,在此感谢她们所表现的耐心。本书的成功不仅是由于我们的努力,同时也是由于上述人员的共同努力。请享受阅读的乐趣吧!
在书籍、Web站点、新闻组、期刊文章或行业杂志中,均可以找到许多关于图形的知识。有时这类资源容易理解,但更多的时候却显得晦涩难懂。有时它们提供了足够多的细节来阐明潜在的原理,但有时却没有提供细节。有时提出一个概念时考虑到了使用浮点运算时出现的数值问题,但在其他很多情形中,概念的提出仅仅局限在纯粹的理论层面上。有时甚至(特别是在一些在线文章中)表述都可能不正确。在查找这类资源,评价其适用性、有效性和正确性,以及将它们改编以适应你自己的需求等方面所花的时间远远超过在其他任务上所用的时间。本书就是针对这类问题而设计编写的。本书为你提供了许多在实际应用中经常遇到的二维和三维几何学算法,并对它们进行了全面的解析和合理的编排。我们之所以将这些算法称为几何工具算法,是因为这些算法和概念实际上是一些用来实现应用目标的工具。
本书所涉及的不同主题的难易程度相差很大。有的非常浅显,比如计算点到线段的距离:而有的又非常复杂,比如计算两个非凸的简单闭合多面体之间的相交。有些工具算法仅需用到向量代数中的若干简单概念。而其他很多工具算法却需要使用微积分中一些较高深的概念,比如函数的导数、水平集(levelsets)和使用拉格朗日乘子(Lagrange multipliers)的约束极小化(constrained minimization)。大多数书籍的重点一般都集中在某一部分章节,但我们编写的这本书却非如此。我们想使本书既适用于图形学领域的新手,也适用于经验丰富的老手。我们为需要复习向量和矩阵代数的读者提供了三章,简明地介绍了与本书相关的内容。本书提供了几个附录,其中一个附录简要地概述了三角几何的基本公式,还有一个附录涵盖了用于几何工具算法的各种不同的数值方法。
本书有两种使用方式。第一种是作为教科书使用。从某种意义上来说,本书介绍的内容是为传授算法的重要思想服务的,因此,本书适合作为大学图形学几何算法课程的教材。虽然本书没有为各章节配备练习,但本书提供了大量的伪码(pseudocode)。用一种实际的编程语言实现这些伪码就是非常合适的一组课程作业。这里引用一句著名的谚语:空谈不如实践。
本书的第二种使用方式是作为参考指南。关于算法的各章是按空间维来组织的,首先介绍二维的内容,然后再介绍三维的内容。只有关于计算几何学的那一章没有按维来组织,但它是作为独立的一章来编排的,这样也很合理。这种组织方式便于读者查找感兴趣的算法。用空间维来划分内容的尝试稍微增加了一些写作的代价。有些适用于任意维空间并且一般只需写作一次的内容现在被重复了。例如,点到线段的距离可以按不分空间维和自由坐标的方式来描述,然而我们选择了在二维和三维中分别讨论该问题的方式。我们认为,这种选择使各章节相对独立,因而可帮助读者避免一种通常的做法,即用许多的纸片粘贴于书的不同位置以便能快速翻到与手头的问题相关的所有章节。
在计算机科学书籍中包含可运行的源代码已经成为出版界的一种惯例。在大部分情形中,编写阐明书中概念的代码需要花费相当可观的时间。对于本书这种涵盖了庞大数量的算法的大型书籍来说,提供阐明所有算法的完整代码集是很不切实际的。因为即使对商业机构来说,这也是一个艰巨的任务。作为一种替代方案,我们在书中增加了尽可能多的伪码。参考文献中包括了许多提供或连接到算法实现的Web网站(在本书第一次印刷时都是有效的连接)的参考条目。其中提供了大量的算法实现的一个网站是www.magic-software.com,它的主机由魔术软件公司(Magic Software,Inc.)提供,DaveEbedy负责维护。可以从这个站点免费下载该网站提供的源代码。该网站还为本书建立了一个网页,即WWW.magic-software.com/GeometricTools.html,其中包含了与本书有关的信息、勘误表,以及代码更新历史(其中包括一些通知,说明了新增的源代码的有关信息和对老的源代码的错误更正)。网页www.mkp.com/gtcg中也提供了与本书相关的资源。
我们感谢本书的评审人员,Tomas Akenine-Moller(Chalmers University of Technology),Ian Ashdown(byHeart Consultants Limited),Eric Haines(Autodesk,Inc.),George Innis(Magic Software,Inc.),PeterLipson(ToysforBob,Inc.),JohnStone(University of lllinois),DanSunday(Johns Hopkins University)和Dennis Wenzel(True Matrix Software),以及技术编辑ParveenKaler(Simon Fraser University)。评审如此规模庞大且涵盖面广的书是困难的,然而他们的勤奋已经得到了回报。评审者的意见和批评已经帮助我们改进了本书许多方面的内容。我们特别感谢Peter和Dennis的意见,因为他们承担了审阅全书这一艰难的任务,并且对本书的几乎每一个方面都提出了详细的意见,既有关于细节的意见也有关于全局的意见。DavidM.Ebefie(Walt Disney Feature Animation)提供了若干章节的许多伪码和一些额外的技术评论,我们非常感谢他的帮助。我们也感谢我们的编辑Diane Cerra和她的助手Belinda Breyer,感谢她们帮助我们组编如此浩大的书籍所花费的时间,她们理解作者需要不断的鼓励才能完成如此巨量的工作,在此感谢她们所表现的耐心。本书的成功不仅是由于我们的努力,同时也是由于上述人员的共同努力。请享受阅读的乐趣吧!
序言回到顶部↑
我的书架上有一本名为《程序员的几何学》(A Programmer's Geometry)的老书,作者是Bowyer和Woodwark。该书初版于1983年,1984年和1985年再版两次后未再重印。多年来,我一直珍藏该书,仔细地记录谁借阅了它。我最近在万维网上搜索该书,结果发现6本旧书,它们的价格在50美元~100美元之间。对于一本只有140页的平装书来说,这样的价格是非常高的。这本书能值那么多钱,是因为它说明了如何编程实现与二维几何学相关的各种操作。它不仅介绍了几何公式,而且还描述了在程序中实现这些公式的有效方法,并且提供了代码片断(用FORTRAN编写的代码片断)。
现在,几乎过去了20年,我们发现了一本新书,堪当这本薄书的继承者。呈现在你面前的这本书从浩如烟海的几何学文献中萃取了对程序设计人员最为有用的内容。自1993年以来,计算机图形学领域已经有了很大的发展,本书反映了这些巨变。受惠于计算机处理器性能的持续改善,过去需要脱机运行的许多运算,现在一般都可在交互程序中完成。多边形的三角剖分、碰撞检测和响应,以及曲面建模和修正,现在都可能按实时的速率完成。本书提供了实现上述及其他许多算法的坚实理论和代码。
除了提供与几何学相关的各种不同领域的任务的可靠参考,本书还介绍了隐藏在算法后面的基础理论。与采用纯粹的菜谱方式(这种方式仅让读者留下可运行的代码,却难以让读者理解代码是如何工作的)的一般书籍不同,作者在本书中解释了一系列关键的概念,这对读者是非常有益的。本书的阐述方法使每一个算法都能成为一种能进一步与其他工具重组的工具。
计算机图形学具有不断动态发展的特性,这使它成为一个特别令人感兴趣的学习领域。着色方法的研究和实现随着所使用硬件的不断发展而发展。例如,在交互式着色领域中,图形加速器的可编程特性一出现,就已经改变了不同技术的相对成本。更通俗地说,CPU的发展已经使内存访问和高速缓存显得比过去用减少运算符次数(例如,计算乘法和加法)的方法来提高运算速度更为重要。然而,基础的理论和算法,比如得到物体凸面外壳的算法就相当经典,受这类变化的影响较小。当然,更加有效的算法总是在不断被发现,而且哪种方法被认为是当前最快的算法还受硬件的影响,但是基本的原理保持不变。固而,在把有关DirectX9和Intel的64位Itanium体系结构的书籍从书架上撤下多年以后,你很可能还会在书架上保留本书的一些版本。
本书的价值之所以将持续存在,还因为有因特网。本人是"图形珍宝(GraphicsGems)"系列书籍代码库的管理者。在这一系列书籍于20世纪90年代早期出版时,这系列书籍的代码,包括PhilipSchneider编写的代码,很明智地免费提供给读者使用。这些年来,读者不断给代码库寄来缺陷修正和代码改进,使所有用户从中受益。同样地,DaveEbefiy一直认真地维护他的"魔法软件(MagicSoftware)"网站(www.magic-software.com),其中包含了本书提供的许多算法的工作版本。计算机图形学领域的一位前沿研究者认为该网站是'国宝",在任何需要的时候这一网站会立刻增加附录和勘误信息。代码不会过时,而是会在有效的支持下不断改进。本书中的算法更是如此,因为它们与特定硬件、网络协议或其他短暂的事物并不相关。
多年来,我和其他的许多人已经在产品和研究项目中使用了作者们编写的算法和代码。程序设计人员工作一个小时的价值通常高于本书的价格。从这个意义来说,你拥有了一本潜在价值为数千美元的书籍。花费这一价值的一小部分即可购得本书,这真是一个现代的奇迹。本书包含了令人难以置信的信息量。数学语言可能降低你的阅读速度,然而如果使用其他的描述方法替换,则必然会包含赘言,且对有些算法可能会描述得不是很精确。如果你想寻找能使阅读更轻松的描述方式,请继续搜索。就像想获得世界上大部分有价值的东西一样,完全地理解本书的内容,是需要付出努力和奋斗的。
Eric Haines
现在,几乎过去了20年,我们发现了一本新书,堪当这本薄书的继承者。呈现在你面前的这本书从浩如烟海的几何学文献中萃取了对程序设计人员最为有用的内容。自1993年以来,计算机图形学领域已经有了很大的发展,本书反映了这些巨变。受惠于计算机处理器性能的持续改善,过去需要脱机运行的许多运算,现在一般都可在交互程序中完成。多边形的三角剖分、碰撞检测和响应,以及曲面建模和修正,现在都可能按实时的速率完成。本书提供了实现上述及其他许多算法的坚实理论和代码。
除了提供与几何学相关的各种不同领域的任务的可靠参考,本书还介绍了隐藏在算法后面的基础理论。与采用纯粹的菜谱方式(这种方式仅让读者留下可运行的代码,却难以让读者理解代码是如何工作的)的一般书籍不同,作者在本书中解释了一系列关键的概念,这对读者是非常有益的。本书的阐述方法使每一个算法都能成为一种能进一步与其他工具重组的工具。
计算机图形学具有不断动态发展的特性,这使它成为一个特别令人感兴趣的学习领域。着色方法的研究和实现随着所使用硬件的不断发展而发展。例如,在交互式着色领域中,图形加速器的可编程特性一出现,就已经改变了不同技术的相对成本。更通俗地说,CPU的发展已经使内存访问和高速缓存显得比过去用减少运算符次数(例如,计算乘法和加法)的方法来提高运算速度更为重要。然而,基础的理论和算法,比如得到物体凸面外壳的算法就相当经典,受这类变化的影响较小。当然,更加有效的算法总是在不断被发现,而且哪种方法被认为是当前最快的算法还受硬件的影响,但是基本的原理保持不变。固而,在把有关DirectX9和Intel的64位Itanium体系结构的书籍从书架上撤下多年以后,你很可能还会在书架上保留本书的一些版本。
本书的价值之所以将持续存在,还因为有因特网。本人是"图形珍宝(GraphicsGems)"系列书籍代码库的管理者。在这一系列书籍于20世纪90年代早期出版时,这系列书籍的代码,包括PhilipSchneider编写的代码,很明智地免费提供给读者使用。这些年来,读者不断给代码库寄来缺陷修正和代码改进,使所有用户从中受益。同样地,DaveEbefiy一直认真地维护他的"魔法软件(MagicSoftware)"网站(www.magic-software.com),其中包含了本书提供的许多算法的工作版本。计算机图形学领域的一位前沿研究者认为该网站是'国宝",在任何需要的时候这一网站会立刻增加附录和勘误信息。代码不会过时,而是会在有效的支持下不断改进。本书中的算法更是如此,因为它们与特定硬件、网络协议或其他短暂的事物并不相关。
多年来,我和其他的许多人已经在产品和研究项目中使用了作者们编写的算法和代码。程序设计人员工作一个小时的价值通常高于本书的价格。从这个意义来说,你拥有了一本潜在价值为数千美元的书籍。花费这一价值的一小部分即可购得本书,这真是一个现代的奇迹。本书包含了令人难以置信的信息量。数学语言可能降低你的阅读速度,然而如果使用其他的描述方法替换,则必然会包含赘言,且对有些算法可能会描述得不是很精确。如果你想寻找能使阅读更轻松的描述方式,请继续搜索。就像想获得世界上大部分有价值的东西一样,完全地理解本书的内容,是需要付出努力和奋斗的。
Eric Haines








点击看大图






加载中...

