三维坐标系介绍与转换

转载 2015年11月19日 20:21:16

转载自:http://support.supermap.com.cn/DataWarehouse/WebDocHelp/OnlineHelp/Flash3D/G_ProjectDocumentation/B_coordinate_system.html

三维坐标系介绍


基本概念

        我们需要三个轴来表示三维坐标系,前两个称作x轴和y轴,这类似于2D平面,第三个轴称作z轴。一般情况下,3个轴互相垂直。也就是每个轴都垂直于其他两个轴。图1展示了一个3D坐标系。

3D笛卡尔坐标系

图1 3D笛卡尔坐标系

        在Flash3D产品中我们实际上是位于z轴负方向面向xy平面来进行操作。当我们面对计算机屏幕并且坐标系没有旋转的情况下,实际看到的应该是图2的情况,这时候z轴垂直屏幕向里。

        在这里的三维空间中,z 属性表示深度。当对象向右移动时,x 属性的值会增大。当对象向上移动时,y 属性的值会增大。当对象远离视点时,z 属性的值会增大。若使用透视投影和缩放,则对象在靠近屏幕时会显得大一些,而在远离屏幕时会显得小一些。

面对计算机实际看到xy平面

图2 面对计算机实际看到xy平面

        2D平面中我们指定x轴向右为正,y轴向上为正的坐标系为标准形式,但是3D中并没有标准形式。不同的作者、不同的研究领域使用不同的标准。但这里我们统一使用图1所示坐标系。

         把3D中的x轴、y轴等同于2D中的x轴、y轴是不准确的。3D中,任意一对轴都定义了一个平面并垂直于第3个轴(例如,包含x,y轴的xy平面,垂直于z轴。同样,xz平面垂直于y轴,yz平面垂直于x轴)。我们指定+x,+y和+z分别指向右方,上方和前方。

        在3D中定位一个点需要三个值:x,y和z,分别代表该点到yz,xz和xy平面的有符号距离1。例如x值是到yz平面的有符号距离,此定义是直接从2D中扩展来的。如图3所示:

3D中定位点

图3 3D中定位点


左手坐标系与右手坐标系

        3D坐标系存在两种完全不同的坐标系:左手坐标系和右手坐标系。如果同属于左手坐标系或右手坐标系,则可以通过旋转来重合,否则不可以。

         “左手”和“右手”分别代表什么意思呢?我们先学习一下怎样判断坐标系的类型。伸出左手,让拇指和食指成“L”形,大拇指向右,食指向上。中指指向前方。现在,我们就已经建立了一个左手坐标系,拇指、食指和其余手指分别代表x、y、z轴的正方向。如图4所示:

左手坐标系

图4 左手坐标系

        同样,伸出右手,使食指向上,中指向前,拇指这时指向左,这就是一个右手坐标系,拇指、食指和其余三个手指分别代表x、y、z轴的正方向。右手坐标系如图5所示:

右手坐标系

图5 右手坐标系

        无论你怎么转动手腕,也不可能让两只手代表的坐标系重合。

        在我们的Flash3D产品中使用的是左手坐标系。

         左手坐标系与右手坐标系对于“正向旋转”的定义也是不一样的,假设空间有一条直线,我们需要绕该直线旋转一定的角度,首先我们叫这个轴为“旋转轴”,不要想当然的认为这里的“轴”是基准轴(x,y或z轴),旋转轴可以取任意方向。这时候如果希望绕轴旋转30度,我们怎么知道该如何旋转呢?

         我们首先要知道哪个方向为正,哪个方向为负,这样才能进行下一步操作。标准区分左手坐标系中的正向与负向的方式叫做“左手法则”。如何操作呢?首先明确一个前提,虽然旋转轴理论上是无限长的,但是我们还是认为它和基准轴一样有一个正方向和一个负方向;左手法则的使用方式:左手握住旋转轴,竖起拇指指向旋转轴正方向,正向旋转方向就是其余手指卷曲的方向;相同的操作方式在右手坐标系就是“右手法则”;如下图6,7:

左手法则

图6 左手法则

右手法则

图7 右手法则

        可以发现,在左手坐标系统中,从旋转轴正方向看下去,正向旋转方向就是顺时针方向;而在右手坐标系统中,从旋转轴正方向看下去,正向旋转方向就是逆时针方向;

        左手坐标系与右手坐标系可以互转,最简单的方式就是将某一个基准轴的正方向和负方向调转;如果掉转了两个轴,相当于绕第三个轴旋转了180度,并没有坐标系的变化。

世界坐标系与物体坐标系

世界坐标系

        3D世界坐标与flash里的坐标不一样, flash坐标只有两根轴(x轴与y轴)以flash影片左上角为坐标原点,向右为X轴正方向,向下为Y轴正方向。3D的世界坐标有三轴(x,y,z),如图8:

视口与世界坐标

图8 视口与世界坐标

        世界坐标的Z轴垂直于视口平面。

物体坐标系

        每个3D元素都有自身坐标,在默认情况下,新创建一个3D元素时,该元素的自身坐标与世界坐标重合。下图新建一球(3D基本元素),该球自身坐标与世界坐标重合。

自身坐标

图9 自身坐标

        当3D元素被移动或转动时,其自身坐标也跟着移动和转动。

自身坐标相对世界坐标旋转

图10 自身坐标相对世界坐标旋转(rotationZ=30)

        将图9里的球的绕z轴旋转30度时就的到图2。图中黑线描出世界坐标。


SuperMap iClient For Flash3D产品中的一些概念

屏幕坐标,世界坐标,地图坐标

         屏幕坐标比较容易理解,就是我们看到的电脑屏幕对应的坐标点,这里的坐标点为二维坐标点,以左上角为原点,水平向右是正向x轴,垂直向下是正向y轴。当我们的鼠标在屏幕上移动或者点击的时候,首先获得的是屏幕坐标,进而通过转换能够得到世界坐标和地图坐标,屏幕坐标如下图11。

屏幕坐标

图11 屏幕坐标

         世界坐标系直接影响到我们观察到的Flash3D内部对象的效果,例如近大远小的透视效果, 所以世界坐标系是一个三维坐标系,我们这里使用的是笛卡尔坐标系,如图1所示,初始 状态,原点位于屏幕正中心,xy平面与计算机屏幕重合,向右向下为正,z轴垂直于电脑 屏幕向里为正。

        地图坐标系是我们看到 的地图平面的坐标系,是一个二维坐标系,它以左下角为原点,向右为x轴正方向,向上 为y轴正方向,如图12所示。这里的二维地图平面放在世界坐标系中,所以它有翻转等效 果。

地图坐标系

图12 地图坐标系

三种坐标系之间转换关系

         当我们已知屏幕坐标,需要知道对应的世界坐标的时候,就会用到屏幕坐标向世界坐标的转换(map:screenToVector3D()方法);同理,当已知三维对象的世界坐标需要知道屏幕坐标的时候,就需要世界坐标向屏幕坐标的转换(map:vector3DToScreen()方法)。应用场景比如:鼠标单击屏幕上某一点能够拾取世界坐标系中该点所在的地物等。

        当我们已知世界坐标上的一个坐标位置,需要知道它在地图上的位置的时候,则需要进行世界坐标到地图坐标的转换(map: vector3DToMap()方法);同理,当知道地图上坐标点,需要知道它在世界坐标系中的位置时,就需要将地图坐标转换成世界坐标(map: mapToVector3D()方法)。应用场景比如:三维世界有一个建筑,需要放在二维地图上,位置间的转化就显得非常必要了。

        当需要鼠标在屏幕移动并获取其对应的地图坐标点位置的时候,就需要屏幕坐标向地图坐标的转换(map: mapToScreen()方法),当已知地图上某点地理坐标,需要知道对应的屏幕坐标的时候,就需要将地图坐标转换成屏幕坐标(map: screenToMap()方法)。应用场景比如:鼠标的框选能够选取地图坐标中对应位置的地物要素(这里就类似二维地图的一些操作),就会用到地图坐标与屏幕坐标的转换。

        总之,坐标之间的转换在具体的应用场景中是非常重要的,尤其影响各个地物之间在不同坐标系之间的展现形式。

(译)三维空间中的几种坐标系

为什么我们需要多个坐标系统呢?任何一个坐标系统都是无限的,包括了空间中的所有点。所以,我们用任意一个坐标系统,然后规定它是“世界空间”,然后所有的点位置都可以用这个坐标系统来描述了。难道就不能更简单点...
  • thx9537
  • thx9537
  • 2017年01月22日 11:24
  • 874

判断三维坐标系旋转正方向的简单方法

判断三维坐标系旋转正方向的简单方法 更多0 的 方向 判断 坐标 方法 简单 引言 做iOS开发,不免要接触到一些特效,其中不乏3D特效,这时候就要对iOS所使用的坐标系了...
  • yongyinmg
  • yongyinmg
  • 2014年08月21日 11:49
  • 21667

三维坐标转换

为了方便自己记忆,记录一下三维坐标旋转矩阵的推导过程。     坐标的旋转变换在很多地方都会用到,比如机器视觉中的摄像机标定、图像处理中的图像旋转、游戏编程等。     任何维的旋转可以表述...
  • Peng___Peng
  • Peng___Peng
  • 2016年05月26日 21:21
  • 7616

任意三维直角坐标系变换矩阵的推导

(v1, v2, v3)坐标系 ==> (u1, u2, u3)坐标系u1 =a1v1 + a2v2 + a3v3u2 =a4v1 + a5v2 + a6v3u3 =a7v1 + a8v2 + a9v...
  • h3w4
  • h3w4
  • 2007年08月30日 10:20
  • 13769

三维坐标系变换

已知原有的坐标系XYZ,和新的坐标系X' Y'Z',如何将就坐标系进行变换,和新坐标系重合。 像这类数学问题,一般转换为矩阵问题,就很容易理解和编程实现。 已知,就的坐标系方向向量为 i ...
  • j123kaishichufa
  • j123kaishichufa
  • 2012年05月29日 09:49
  • 10019

三维空间绕坐标轴的旋转变换

 三维空间中的旋转变换比二维空间中的旋转变换复杂。除了需要指定旋转角外,还需指定旋转轴。     若以坐标系的三个坐标轴x,y,z分别作为旋转轴,则点实际上只在垂直坐标轴的平面上作二维旋转。此时用二维...
  • bingcaihuang
  • bingcaihuang
  • 2010年08月12日 10:17
  • 18336

3D图形学坐标系变换

3D图形学坐标系变换  3D计算机图形学常用的有:物体坐标系,世界坐标系,相机坐标系,投影坐标系以及屏幕坐标系。我们主要讨论的就是这些坐标系间的转换。这些坐标系都是为了完成计算机3D图形学最最最...
  • hiramtan
  • hiramtan
  • 2013年06月04日 11:02
  • 8821

OpenGL之坐标转换(好文-清晰版)

下面这篇文章详细讲述了OpenGL里的坐标转换,清晰,明了。但是其所谓的渲染管线只包括modelview 转换 和 投影变换,我觉得不是这样的。这只是从坐标角度吧。比如什么顶点着色、光栅化、送至帧缓存...
  • zhongjling
  • zhongjling
  • 2013年01月10日 11:17
  • 23236

图形学1-三维坐标系间的变换矩阵推导

概要:三维坐标系的变换,实质上则是原点以及正交基向量的变化,在空间中表现为平移和旋转。 如图所示的坐标系变换,可以用一个变换矩阵来表示。 虽然原理也比较简单,但是大一学的线性代数已经有点忘记了。...
  • jc_laoshu
  • jc_laoshu
  • 2017年04月07日 20:56
  • 2824

3D图形:坐标变换

详细讲解坐标变换的基本原理
  • i_dovelemon
  • i_dovelemon
  • 2014年08月07日 20:30
  • 5332
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:三维坐标系介绍与转换
举报原因:
原因补充:

(最多只允许输入30个字)