首页 > 其他分享 >3D数学基础:图形和游戏开发(第二版)--读书笔记(1)

3D数学基础:图形和游戏开发(第二版)--读书笔记(1)

时间:2024-10-27 21:44:05浏览次数:5  
标签:cos frac 读书笔记 -- 二维 坐标 theta sin 3D

简介:

清华大学出版社-图书详情-《3D数学基础:图形和游戏开发(第2版)》

本书是关于3D数学、三维空间的几何和代数的入门教材。它旨在告诉你如何使用数学描述三维中的物体及其位置、方向和轨迹。这不是一本关于计算机图形学、模拟,甚至计算几何的书,但是,如果读者打算研究这些科目,那么肯定需要这里的信息。

这是一本适宜视频游戏程序开发人员阅读的图书。虽然本书假定大多数读者都是为了编写视频游戏而学习,但我们期待更广泛的受众,并且在设计这本书的体例时也考虑到了不同的受众。如果你是程序开发人员或有兴趣学习如何制作视频游戏,欢迎加入! 如果你没有达到这些标准,那么你在这里仍然可以收获很多。

我们已经尽一切努力使本书对设计师和技术美工也很有用。虽然本书中有一些代码片段,但即使对于非程序开发人员来说,它们也很容易阅读(希望如此)。最重要的是,虽然你需要先理解相关的概念才能理解代码,但是反过来并不成立。我们使用代码示例来说明如何在计算机上实现创意,而不是解释这些创意本身。

第一章:笛卡尔坐标系

1.1 一维数学

image-20241027173457004

自然数 Natural Number : 非负整数的集合,其特点是有序性和无限性

因为日常生活中对数字的需要,于是先产生自然数,这里提到是“死羊的个数”。

整数 Integer : 整数是由自然数字和它们的负面对应物组成。

因为生产生活的发展,产生经济活动,逐步开始有贫穷、负债、借贷等需要,于是在自然数的基础上拓展到整数。

**有理数 Rational Number :整数和分数 **

再在整数的基础上拓展,如要买半只羊,拓展到分数领域,便将数字范围由整数拓展到有理数。

实数 Real Number :包括有理数和无理数

有时候也会遇到无法准确表示实际意义的数值,典型的如Π(圆周率)。

我们需要知道是,有理数是可数的(也就是说,可以与自然数一一对应),但实数是不可数的。

对自然数和整数的研究称之为离散数学 Discrete Mathematics

对实数的研究称之为 连续数学 Continuous Mathematics

现实世界却是离散的。这对三维计算机生成的虚拟现实的设计者有何影响?就其本质而言,计算机是离散的和有限的,并且更有可能在创造过程中而不是在现实世界中遇到离散性和有限性的结果。

这些数字可以是short、int、float 和double类型的。

计算机中离散数学所使用的变量类型:

  • short:short是一个16位(bit)的整数,可以存储65536个不同的值
  • int: int是一个32位的整数,它最多可存储4,294,967,296个不同的值
  • float: float 也是一个32位的值,它可以存储有理数的子集(略少于4294967296,在这里细节并不重要)。
  • double: double 和 float类似,但它使用64位而不是32位.

计算机图形学第一定律:

如果它看起来正确,那就是对的。

1.2 二维笛卡尔空间(平面空间)

image-20241027173655118

  • 每个二维笛卡尔坐标空间都有一个特殊位置,称之为原点,Origin,它是坐标系的“中心”,坐标为(0,0)
  • 每个二维笛卡儿坐标空间都有两条直线通过原点。每条线都被称为轴(Axis),并且可以在两个相反的方向上无限延伸。
  • 两个轴彼此垂直(实际上,它们并不是必然要垂直的,但我们看到的大多数常见系统都将具有垂直轴)。

在二维坐标系中描述坐标位置:

image-20241027174248767

在二维中,两个数字即可用于指定位置(事实上,用两个数字来描述一个点的位置就是它被称为二维或二维空间的原因。在三维或三维空间中,需要使用3个数字)。在(2,4)这个示例中,第一个坐标(也就是2)被称为x坐标;第二个坐标(也就是4)被称为y坐标。

请注意,垂直网格线由所有具有相同x坐标的点组成,换句话说,垂直网格线(实际上是任何垂直线)标记常数x的线。同样地,水平网格线标记常数y的线,也就是说,该行上的所有点都具有相同的y坐标。当讨论极坐标空间时,需要稍微回顾一下这个知识点。

1.3 三维笛卡尔空间

1.3.1 新增维度和轴

image-20241027174613432

在三维中,我们需要3个轴来建立坐标系。前两个轴分别称为x轴和y轴,就像在二维中一样(当然,说它们与二维轴相同是不准确的,稍后会有更详细的解释)。我们将第三个轴(可预测地)称为z轴。一般来说,我们会进行设置以使所有轴相互垂直,即每个轴垂直于其他轴。

在三维中,任何一对轴定义包含两个轴并垂直于第三轴的平面。同样,xz平面垂直于y轴,yz平面垂直于x轴。我们可以将这些平面中的任何一个视为自己的二维笛卡儿坐标空间。

1.3.2 在三维空间中指定位置

image-20241027174835768

在三维中,使用3个数字x、y和z指定点,这些数字分别给出yz、xz和xy平面的有符号距离。

距离的测量将沿着平行于轴的直线进行。例如,x值就是到yz平面的有符号距离,沿着平行于x轴的直线测量。

1.3.3左手和右手坐标空间

所有二维坐标系在某种意义上都是“相等的”,对于任何两个二维坐标空间A和B,可以旋转坐标空间A,使得+x和+y的指向与它们在坐标空间B中的指向相同(假设轴是垂直的)。

三维坐标系有两周坐标类型:

左手(Left-Handed)坐标空间和右手(Right-Handed)坐标空间。

如果两个坐标空间具有相同的旋向性(Handedness),则可以旋转它们使得轴对齐;如果两个坐标空间的旋向性相反,那么这就是不可能的。

image-20241027175233692

这是左手三维空间坐标系

image-20241027175307518

这是右手空间坐标系

左旋和右旋坐标系在“正旋转”的定义上也有所不同。

假设在空间中有一条直线,需要围绕这条直线旋转指定的角度,将此直线称之为旋转轴。首先我们必须定义轴“指向”的方向,基于此来指定旋转的正方向。

image-20241027175801993

在左手坐标系中,正向旋转从轴的正端看时是顺时针(Clockwise)旋转的;

而在右手坐标系中,正向旋转是逆时针(Counterclockwise)旋转的。

1.4 一些零散的知识

求和表示法(Summation Notation)

image-20241027180300524

要获取一系列数值的乘积,可用类似的表示法:

image-20241027180406453

区间符号

\[[a,b] <==> a \le x \le b \]

\[(a,b) <==> a < x <b \]

角度、度数和弧度

度 Degree : 360度 为一周

弧度 Radian: 测量度数所对应的那段弧的长度,

image-20241027181939553

三角函数

使用单位圆来定义三角函数:

image-20241027182058267

在二维中,如果以指向+x的单位线条开始,然后逆时针旋转该线条角度0,则可以在标准位置(Standard Position)绘制该角度(如果该角度为负,则沿另一个方向旋转线条)。

image-20241027182336159

这样旋转的线条端点的(x,y)坐标具有特殊属性,并且在数学上非常重要,因此,它们被赋予了特殊函数,称为角度的余弦(cosine)和正弦(sine),定义如下:

image-20241027182248714

在正弦和余弦函数基础上可以继续定义割线、余割、切线和余切

\[割线:sec \theta = \frac{1}{cos\theta}, 切线 :tan\theta = \frac{sin\theta}{cos\theta},余割:csc\theta = \frac{1}{sin\theta},余切:cot\theta = \frac{1}{tan\theta}=\frac{cos\theta}{sin\theta} \]

image-20241027183655226

比关系,谨记勾股定理:勾3 股4 弦5

\[余弦函数:cos\theta = \frac{x}{r} ,正弦函数:sin\theta = \frac{y}{r},正切函数:tan\theta = \frac{y}{x} \]

\[割线函数:sec\theta = \frac{r}{x},余割函数:csc\theta = \frac{r}{y},余切函数:cot\theta = \frac{y}{x} \]

三角函数之间的恒等式:

\[sin(-\theta) = -sin\theta ,cos(-\theta) = cos\theta ,tan(-\theta) = - tan\theta \]

\[sin(\frac{\pi}{2} - \theta) = cos\theta, cos(\frac{\pi}{2} - \theta) = sin\theta,tan(\frac{\pi}{2} - \theta) = cot\theta, \]

勾股定理:(毕达哥拉斯定理)

\[sin^2\theta + cos^2 \theta = 1, 1 + tan^2 \theta = sec^2 \theta, 1+cot^2 \theta = csc^2\theta \]

image-20241027214037165

倍角公式:

image-20241027214121354

正弦定理和余弦定理:

image-20241027214201802

image-20241027214220846

标签:cos,frac,读书笔记,--,二维,坐标,theta,sin,3D
From: https://www.cnblogs.com/TonyCode/p/18509068

相关文章

  • zlibrary数字图书馆最新网址及电脑客户端/app下载
    zlibrary数字图书馆Z-Library是一家电子图书馆,同时也是全球科学图书和学术文献最大的免费资源之一。它拥有庞大的数字档案库,包含超过1400万本书籍,涵盖了多个领域和语种,使得用户能够轻松获取所需的文学作品、学术资料等。此外,Z-Library还在全球42个国家设立了150多个实体书籍交流......
  • 实验二
    任务一代码1#pragmaonce23#include<string>45//类T:声明6classT{7//对象属性、方法8public:9T(intx=0,inty=0);//普通构造函数10T(constT&t);//复制构造函数11T(T&&t);//移动构造函数......
  • 代码大全
    在学习编程的道路上,《代码大全(第二版)》如同一座灯塔,为我照亮了前行的方向。阅读这本书的过程,就像是在与一位经验丰富的导师对话,它让我对软件开发有了更为全面和深入的理解。书中强调了软件构建在软件开发中的核心地位。构建活动涵盖编码、调试、详细设计、规划构建、单元测试、集......
  • 产品测试和缺陷管理有哪些软件
    产品测试和缺陷管理有:一、JIRA;二、PingCode;三、Bugzilla;四、MantisBT;五、Redmine;六、TestRail;七、Trac;八、YouTrack。JIRA是一款广泛应用于软件开发领域的产品测试和缺陷管理软件,具有灵活性和可配置性高的特点。一、JIRAJIRA是由澳大利亚公司Atlassian开发的一款优异的产品测......
  • HTTP相关返回值异常如何解决(上篇)
    ​今天我们讲讲HTTP相关返回值异常如何解决(实例持续更新中)一、HTTP介绍HTTP(超文本传输协议,HypertextTransferProtocol)是用于在网络上进行数据交换的应用层协议。它是万维网(WWW)的基础,允许客户端(通常是网页浏览器)与服务器之间进行通信。以下是对HTTP的一些基本介绍:基本概......
  • 程序员修炼之道~一
    初读《程序员修炼之道》第一章,犹如开启了一扇通往高效编程世界的大门,让我这个大学生对编程有了全新且深刻的认识。“我的源码让猫给吃了”这一表述生动地强调了程序员对自身行为负责的重要性。在编程中,遇到问题不应推诿,而要诚实地面对并积极寻找解决方案。就像在小组项目中,如果......
  • 6.5(学号:3025)
    importnumpyasnpdistances=np.array([[0,2,7,np.inf,np.inf,np.inf],[2,0,4,6,8,np.inf],[7,4,0,1,3,np.inf],[np.inf,6,1,0,1,6],[np.inf,8,3,1,0,3],[np.inf,np.inf,np.inf,6,3,0]],dtype=float)students=np.array([50,40,......
  • 委外加工厂仓库库存数据怎么管理
    委外加工厂仓库库存数据的管理涉及精准追踪和监控原材料、在制品、成品的存量,确保库存数据的准确性,降低资金沉淀和库存积压。关键的一点是实施高效的库存管理系统。这种系统通常集成了实时数据更新功能,使得委外加工的企业能够通过网络平台即时掌握库存情况。详细来说,系统应包括准......
  • IT软件部落-Emoji表情字符大全增强你的表达能力-记事本也可以有情感,总有一个您用得上,
    这是手绘的吗?不,它是Emoji表情字符,就是普通的文本,你不相信? ......
  • 6.6(学号:3025)
    importnumpyasnpmatches=np.array([[0,1,0,1,1,1],#1队[0,0,0,1,1,1],#2队[1,1,0,1,0,0],#3队[0,0,0,0,1,1],#4队[0,0,1,0,0,1],#5队[0,0,1,0,0,0]#6队],dtype=int)n=matches.shape[0]closure=matches.copy......