游戏开发工具

笛卡尔介绍

一、笛卡尔介绍

笛卡尔介绍

笛卡尔(René Descartes,1596年3月31日-1650年2月11日),法国哲学家、数学家、自然科学家,被视为现代哲学的奠基人之一。

1-1.jpg

他提出了“我思故我在”的名言,强调思想作为认识主体的重要性,主张用数学方法和“怀疑论”(即怀疑一切不可置疑的东西)来寻求真理,被誉为现代哲学的“怀疑论之父”。


笛卡尔的数学贡献也非常突出,他发明了坐标几何学,用代数方法解决了许多几何问题,为现代数学的发展奠定了基础。他还在物理学上提出了运动定律和惯性定律,为牛顿的力学打下了思想基础。


在医学上,他提出过“机械假说”或“机械论”,将人体视为一个物理机器,强调人体的生理和心理是可解释的,通过物理、化学的方法也能被研究和理解,为生理学和心理学的研究提供了一种新的角度。


总之,笛卡尔是一个思想家和学者,他对哲学、数学、自然科学、医学等领域都有重要贡献,他强调怀疑精神、数学方法和理性思维的重要性,为现代科学思想和科学方法的发展提供了重要的理论基础。


二、笛卡尔与坐标系的故事

笛卡尔与坐标系的故事

据说有一天,法国哲学家、数学家笛卡尔生病卧床,病情很重,尽管如此他还反复思考一个问题:几何图形是直观的,而代数方程是比较抽象的,能不能把几何图形与代数方程结合起来,也就是说能不能用几何图形来表示方程呢?

要想达到此目的,关键是如何把组成几何图形的点和满足方程的每一组“数”挂上钩,他苦苦思索,拼命琢磨,通过什么样的方法,才能把“点”和“数”联系起来。突然,他看见屋顶角上的一只蜘蛛,拉着丝垂了下来,一会功夫,蜘蛛又顺着丝爬上去,在上边左右拉丝。

1.jpg

蜘蛛的“表演”使笛卡尔的思路豁然开朗。他想,可以把蜘蛛看做一个点,它在屋子里可以上、下、左、右运动,能不能把蜘蛛的每个位置用一组数确定下来呢?


他又想,屋子里相邻的两面墙与地面交出了三条线,如果把地面上的墙角作为起点,把交出来的三条线作为三根数轴,那么空间中任意一点的位置就可以用这三根数轴上找到有顺序的三个数。

反过来,任意给一组三个有顺序的数也可以在空间中找出一点P与之对应,同样道理,用一组数(x、y)可以表示平面上的一个点,平面上的一个点也可以有用一组两个有顺序的数来表示,这就是坐标系的雏形。

1-1.jpg

那么,当笛卡尔创立解析几何时,使用的是哪种坐标系呢?

当时,笛卡尔取定一条直线当基线(即现在所说的x轴),再取定一条与基线相交成定角方向的直线(即现在所说的y轴,但当时并没有明确出现y轴,100年后,一个瑞士人(克拉美)才正式引入y轴),他没有要求x轴与y轴互相垂直。所以当初笛卡尔使用的并不是现在我们所用的只限制在第一象限内。“横坐标”和“纵坐标”的名称笛卡尔也没有使用过,“纵坐标”是由莱布尼茨在1694年正式使用的,而“横坐标”到18世纪才由沃尔夫等人引入,至于“坐标”一词,也是莱布尼茨在1692年首次使用的。

可见当初笛卡尔的坐标系并不完善,经过后人不断地改善,才形成了今天的直角坐标系,然而,笛卡尔迈出的最初一步具有决定意义,所以人们仍把后来使用的直角坐标系称为直角坐标系。


三、什么是笛卡尔坐标系?

什么是笛卡尔坐标系?

笛卡尔坐标系(Cartesian coordinate system)是由17世纪法国哲学家、数学家、自然科学家笛卡尔发明的一种几何坐标系。

1-2.jpg

笛卡尔坐标系是由两个垂直于彼此的直线(x轴和y轴)组成的平面直角坐标系,每个直线上都有一个从原点开始的刻度,确定了每个点的唯一位置。这两个直线分别称为横坐标轴(x轴)和纵坐标轴(y轴),它们交点的位置称为坐标原点,在笛卡尔坐标系中,将每个点都表示为一个有序数对(x, y),称为该点的笛卡尔坐标。


笛卡尔坐标系的发明引领了数学、物理学、工程学、计算机科学等领域的发展,在数学上,笛卡尔坐标系是引入解析几何的关键,可以在平面上用数学语言描述出几何图形的特征和性质;在物理学中,笛卡尔坐标系是研究物体运动、力学等问题的基础;在工程学中,笛卡尔坐标系是制图的基础;在计算机科学中,笛卡尔坐标系常常被用作计算机图形学中的基础概念。


总之,笛卡尔坐标系是一种平面直角坐标系体系,由x轴和y轴组成,每个点都可以表示为一个有序数对(x, y)的形式,是数学、物理、工程学和计算机科学中重要的基础概念之一。


四、笛卡尔坐标系解决什么问题?

笛卡尔坐标系解决什么问题?

笛卡尔坐标系是在平面直角坐标系中建立起来的一种描述几何图形和解决几何问题的坐标系,通过轴上的刻度和点的坐标配合精确定位和绘制几何对象。下面介绍一下如何用笛卡尔坐标系来分析问题。

1、建立坐标系

在纸上画出两条相互垂直的坐标轴,确定原点并刻度,选定一个适当的比例代表长度大小。

2、确定基本元素

根据问题要求,确定要分析的几何图形或体形,用适当的符号来表示它们在坐标系中的位置。

3、确定坐标

根据分析对象在坐标系中的位置,确定各个点的坐标。

4、计算问题

通过代数运算、方程等数学方法来计算图形的特定属性,如长度、面积、周长等,或求解问题的解。

5、绘制图形

通过计算得到的几何图形的坐标,绘制在笛卡尔坐标系图纸上,供进一步的分析和对比。

6、分析结果

对计算结果进行评估和解释,判断计算是否准确、是否满足问题要求,甚至通过图形来进行可视化分析。

总之,通过建立笛卡尔坐标系,确定几何图形或体形的基本元素和坐标,进行代数计算和数据可视化,从而解决各种几何问题。笛卡尔坐标系是数学的基本工具之一,可以应用到各个领域的问题中,如物理、化学、工程、计算机科学等领域。


五、二维笛卡尔坐标系

二维笛卡尔坐标系

二维笛卡尔坐标系包含两部分信息:

1、一个特殊的位置,原点,是整个坐标系的中心

2、两条过原点的相互垂直的矢量,即X轴和Y轴,这些坐标轴也被称为是该坐标系的基矢量。

1.jpg

二维笛卡尔坐标系可以帮助我们精确地定位一个点的位置。


笛卡尔坐标系特点:

1、2D坐标空间是无限伸展的。

2、坐标系中的直线没有宽度,坐标系中每个点都是坐标系的一部分。


2D笛卡尔坐标系:

水平的轴称作X轴,向右为X轴的正方向,垂直的轴称作Y轴,向上为Y轴的正方向,这是表示2D坐标系的惯用法。(注意:名词“水平”和“垂直”实际上并不准确)。


六、2D笛卡尔坐标系定义

2D笛卡尔坐标系定义

2D笛卡尔坐标系由以下两点定义

1、2D笛卡尔坐标系都有一个特殊的点,称作原点(Origin(0,0)),它是坐标系的中心。

2、每个2D笛卡尔坐标系都有两条过原点的直线向两边无限延伸,称作“轴”(axis),两个轴互相垂直。


上图中,水平的轴称作x轴,向右为x轴正方向,垂直的轴称作y轴,向上的y轴正方向,这是表示2D坐标系的惯用法。注意,名词“水平”和“垂直”实际上并不准确,比如桌面上的坐标系,两个轴都是“水平”,并没有真正“垂直”的轴。

我们可以根据自己的需要来决定坐标轴的指向。


七、用笛卡尔坐标(x,y)定位2D空间的点

用笛卡尔坐标(x,y)定位2D空间的点

为了在笛卡尔坐标系中定位点,引入了笛卡尔坐标的概念。

在 2D 平面中,两个数(x,y)可以定位一个点,坐标的每个分量都表明了该点与原点之间的距离和方位:每个分量都是到相应轴的有符号距离。

“有符号距离” 指的是在某个方向上距离为正,在相反方向上为负。


八、三维笛卡尔坐标系

三维笛卡尔坐标系

三维笛卡尔坐标系需要3个坐标轴和一个原点,这三个坐标轴被称为该坐标系的基矢量(basis vector)。

二维坐标系中: 

X轴基矢量:(1,0)  

Y轴基矢量:(0,1)  

三维坐标系中:  

X轴基矢量:(1,0,0)  

Y轴基矢量:(0,1,0)  

Z轴基矢量:(0,0,1)  

1.jpg

标准正交基(orthonormal basis):若三个坐标轴之间相互垂直且长度为1,那么这样基矢量被称为标准正交基。

正交基(orthogonal basis):若三个坐标轴之间相互垂直但长度不为1,那么这样的基矢量被称为正交基。



九、用笛卡尔坐标(x,y,z)定位3D空间内的点

用笛卡尔坐标(x,y,z)定位3D空间内的点

前面提到过,把3D中的x轴、y轴等同于2D中的x轴、y轴是不准确的。

3D中,任意一对轴都定义了一个平面并垂直于第3轴(如,包含x,y轴的 xy平面,垂直于z轴,同样的,xz平面垂直于y轴,yz平面垂直于x轴),我们可以认为这3个平面是3个2D笛卡尔空间。

1.jpg

例如,如果指定+x,+y和+z分别指向右方,上方和前方,则可以用xz平面可以表示“地面”的2D笛卡尔平面。


十、左手坐标系与右手坐标系

左手坐标系与右手坐标系

三维坐标系中有两种不同的旋向性将坐标系分为了左手坐标系右手坐标系,这两个坐标系无法通过旋转的方式使其完全重合。


若我们右方为X轴正向,我们的头顶为Y轴正向,那么在不同的坐标系中,仅仅是我们的前方所处的Z轴正负不同而已:若我们是在右手坐标系中,那么我们的前方就是Z轴负方向;若我们是在左手坐标系中,那么我们的前方就是Z轴的正方向。

1.jpg

此外,左右坐标系还带来了左右对正向旋转的定义的不同。

左右坐标系无优劣之分,绝大多数情况不会影响底层的数学运算,仅在映射到视觉上时有些差别。



十一、Cocos2dx引擎坐标系统

Cocos2dx引擎坐标系统

屏幕坐标系/UI坐标系:

iOS, Android, Windows Phone等在开发应用时使用的是标准屏幕坐标系,原点在左上角,X轴向右,Y轴向下(比如处理触摸事件时CCTouch对象中的坐标就是屏幕坐标系,因此在cocos2d中对触摸事件做出响应前需要首先把触摸点转化到GL坐标系,可以使用CCDirector的convertToGL来完成这一转化。)

OpenGL坐标系:

Cocos2D以OpenGL为图形库,所以它使用OpenGL坐标系,OpenGL坐标系原点在屏幕左下角,x轴向右,y轴向上。比如CCNode类的setPosition函数调用就是此坐标系)

1.jpg

世界坐标系和本地坐标系

在开发中,我们经常会提到两个比较抽象的概念-世界坐标系和本地坐标系,这两个概念可以帮助我们更好的理解节点在Cocos2d坐标系中的位置以及对应关系。

世界坐标系:也叫做绝对坐标系。世界坐标系和GL坐标系一致,原点在屏幕左下角。

cocos2d中的元素是有父子关系的层级结构,我们通过CCNode的position设定元素的位置使用的是相对与其父节点的本地坐标系而非世界坐标系。最后在绘制屏幕的时候cocos2d会把这些元素的本地坐标映射成世界坐标系坐标。

本地坐标系:也叫做相对坐标系,是和节点相关联的坐标系。每个节点都有独立的坐标系,当节点移动或改变方向时,和该节点关联的坐标系将随之移动或改变方向。


关于世界坐标系和本地坐标系的相互转换,在Node中定义了以下四个常用的坐标变换的相关方法。

// 把世界坐标转换到当前节点的本地坐标系中
Point convertToNodeSpace(const Point& worldPoint) const;

// 把基于当前节点的本地坐标系下的坐标转换到世界坐标系中
Point convertToWorldSpace(const Point& nodePoint) const;

// 基于Anchor Point把基于当前节点的本地坐标系下的坐标转换到世界坐标系中
Point convertToNodeSpaceAR(const Point& worldPoint) const;

// 基于Anchor Point把世界坐标转换到当前节点的本地坐标系中
Point convertToWorldSpaceAR(const Point& nodePoint) const;

 

十二、Unity引擎中的坐标系

Unity引擎中的坐标系

对于模型空间使用的是左手坐标系,也就是说一个物体的右侧(right)、上侧(up)和前侧(forward)分别对应X轴的正方向、Y轴的正方向、Z轴的正方向。

1.jpg

对于观察空间使用的是右手坐标系,也就是以摄像机为原点的坐标系。

1-1.jpg

在这个坐标系中,摄像机的右侧(right)、上侧(up)、前方(forward),分别对应X轴的正方向、Y轴的正方向、Z轴的负方向。



十三、UE虚幻引擎坐标系

UE虚幻引擎坐标系

在虚幻引擎世界里,空间坐标的单位是厘米(cm),且规定红轴X正方向为前方,绿轴Y正方向为右方,蓝轴Z正方向为上方。显然,X轴代表前后方向,Y轴代表左右方向,Z轴代表上下方向。

1、UE4的X轴是前方。

2、UE4和unity都是左手坐标系。

1-1.jpg

3、UE4中,Rotation的X是翻滚角Roll,围绕X轴旋转。Y是俯仰角pitch,围绕Y轴旋转,Z当然是偏航角yaw了,围绕Z轴。

1.jpg

翻滚 Roll, 俯仰 Pitch, 偏航 Yaw 如下(顾名思义很好记):

1、X轴正方向为右方,围绕X轴旋转为Pitch,也叫俯仰角。

2、Y轴正方向为上方,围绕Y轴旋转为Yaw,也叫偏航角。

3、Z轴负方向为前方,围绕Z轴旋转为Roll,也叫翻滚角。