1D数学

两千多年前,人们为了方便“数羊”而发明了自然数,“一只羊”的概念很容易理解,接下来是“两只羊”和“三只羊”,以此类推。人们很快意识到这样数下去工作量巨大,于是就在某一点放弃计数而代之以“很多羊”。不同的文明在不同点放弃计数。随着文明的发展,我们渐渐可以支持专门的人去思考“数字”,这些人不用考虑生计问题。这些智者确定了“零”的概念(没有羊),他们不准备为所有的自然数命名,而是发展出了多种计数体系,在需要的时候再为自然数命名,使用数字“1”,“2”等(罗马人使用“I”,“V”,“X”之类的)。这样,数学诞生了。

人们习惯于把羊排成一排来计数,这导致了数轴概念的产生,在一条直线上等间隔地标记数字。理论上,数轴可以无限延长,但为了方便,我们只标识到了某个数值,后面用一个箭头来表示数轴可以延长。历史上的思想家们想到它能表示无穷大的数,但羊贩子们可能不会理解这个概念,因为这已经超出了他们的想象。

如果您很健谈,就能劝说别人买一只您实际上没有的羊,由此产生了债务和负数的概念。卖掉这只想象中的羊,您实际有“负一”只羊。这种情况导致了整数的产生——由自然数和它们的相反数(负数)组成。

贫穷的出现显然早于债务,贫穷致使一部分人只买得起半只羊,甚至四分之一只羊。于是产生了分数——由一个整数除以另一个整数形成,如2/3,111/27数学家门称这些数为有理数,有理数填补了数轴上整数之间的空白。为了方便,人们发明了小数点表示法,用“3.1415”来代替冗长的31415/10000。

过了一段时间,人们发现日常生活中使用的有些数无法用有理数表示,最典型的例子是圆的周长与直径的比,记作PI。这就产生了所谓的实数,实数包含有理数和PI这样的无理数——如果用小数形式表示,小数点后需要无穷多位。实数数学被很多人认为是数学中最重要的领域之一,因为它是工程学的基础,人类使用实数创建了现代文明,最酷的事情是有理数可数,而实数不可数,。研究自然数和整数的领域称为离散数学,研究实数的领域被称为连续数学

事实上,实数只是被文明文化所认可的,约定俗成的一种概念。许多著名物理学家们都认为:实数只是一种错觉,因为宇宙是离散和有限的。如果现实世界是由有限个离散事物组成的,那么我们只能够计数到某个固定值——因为我们已经数完了世界中的所有事物(不仅我们数完了羊,连烤面包机、修理工等额定也都数完了)。由此我们断定,仅用理算数学就能描述整个宇宙,并且只需要用到自然数的一个有限子集(很大但可数)。也许宇宙中就存在着一个超越我们科技的文明,他们从来没有听过连续数学、基本微积分理论,甚至是无限这样的概念。他们从不使用PI,而是使用3.14159(或者更精确的3.1415926535897932382626433832795)就可以建造完美的世界。

(《三体I》中提到外星人只在飞船上标记一个点就能带走整部百科全书的例子,说的正是这个意思)

那为什么还要使用连续数学呢?因为它在工程学上非常有用。但值得注意的是现实世界中使用的术语“实数”,通常是离散的意思。对3D虚拟世界的设计者来说,需要注意什么呢?和现实世界一样,将要处理的是一系列离散和有限的事物,可以使用C++提供的多种数据类型来描述3D虚拟世界,包括short,int,float和double。short是16位整数,能代表65536个不同的数值,虽然这个数很大,但度量现实世界还是远远不够的。int是32位整数,可以代表42亿个不同的数值。float是32位有理数,可以代表42亿个数值。double与float类似,是64位有理数。

为虚拟世界选择度量单位的关键是选择离散的精度,有一种错误的观点认为short、int是离散的,而float、double是连续的,而实践上这些数据类型都是离散的。以前的计算机图形学教材通常建议选用整数,因为那时硬件处理浮点数的能力要比处理整数弱,但对于现在的硬件。这种说法已经过时了。那应该怎样选择精度呢?计算机图形学的第一准侧:

计算机图形学第一准侧:近似原则如果看上去是对的它就是对的

(计算机中的PI不是实数,但我们认为它就是实数,就是被普遍认同的那个小数)

后记

1D数学是1根数轴(这样理解的话默认了数是连续的),2D数学是2根数轴(2D笛卡尔坐标系),3D数学是3根数轴(3D笛卡尔坐标系)。。。

参考资料

  • 《3D数学基础:图形与游戏开发》

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*

code