利用矩阵进行坐标转换
- 格式:doc
- 大小:89.01 KB
- 文档页数:8
ue 矩阵切换坐标系UE4矩阵——切换坐标系概述:在UE4中,矩阵是一种被广泛应用于坐标系变换和几何变换的数学工具。
在游戏开发中,我们经常需要进行不同坐标系之间的转换,比如从世界坐标系到局部坐标系的转换,或者从局部坐标系到相机视图空间的转换。
本文将介绍UE4中的矩阵及其使用方法,以及如何使用矩阵来进行不同坐标系之间的切换。
1. 了解矩阵矩阵是一个二维数组,由若干个行和列组成。
在UE4中,常用的矩阵类型有四种:FMatrix、FMatrix2x2、FMatrix3x3和FMatrix4x4。
其中,FMatrix 是最常用的类型,用于进行四维空间的变换。
FMatrix2x2、FMatrix3x3和FMatrix4x4分别用于进行二维、三维和四维空间的变换。
在UE4中,矩阵使用列主序(column major)存储,即矩阵的每一列依次存储在内存中。
2. 矩阵的创建和使用在UE4中,可以使用FMatrix结构体来创建和操作矩阵。
下面是一个创建单位矩阵的示例:FMatrix Matrix = FMatrix::Identity;这样就创建了一个单位矩阵,并将其赋值给Matrix。
接下来,可以通过各种方法来修改和使用矩阵,比如平移、旋转和缩放等操作。
下面是几个常用的矩阵操作方法:- FMatrix::Translation(const FVector& InTranslation):平移矩阵,将矩阵的最后一列设置为平移向量。
- FMatrix::RotationX(float Angle):绕X轴旋转矩阵,将矩阵的第一列设置为旋转后的X轴。
- FMatrix::Scale3D(const FVector& InScale):缩放矩阵,将矩阵的对角元素设置为缩放向量。
3. 坐标系变换在UE4中,坐标系变换可以通过矩阵相乘的方式实现。
当需要将一个点从一个坐标系转换到另一个坐标系时,可以使用两个矩阵相乘的方式来进行变换。
矩阵旋转坐标变换一、基本概念在二维平面上,我们通常使用笛卡尔坐标系来描述点的位置,其中一个点的坐标可以用两个数值(x,y)来表示。
在三维空间中则需要用三个数值(x,y,z)来表示点的位置。
当我们对坐标系进行旋转时,点的坐标也会随之发生变化。
矩阵旋转坐标变换就是描述了在不同坐标系中点的坐标如何发生变化的数学方法。
假设我们要将一个点p(x, y)绕原点O逆时针旋转θ度,我们可以使用矩阵旋转坐标变换来实现这一操作。
旋转后的点坐标记为p'(x', y'),其公式可以表示为:x' = x*cos(θ) - y*sin(θ)y' = x*sin(θ) + y*cos(θ)这两个公式就是矩阵旋转坐标变换的基本原理。
其中,cos(θ)和sin(θ)表示角度θ的余弦和正弦值,分别对应于旋转矩阵的元素值。
通过这两个公式,我们可以将点p(x, y)绕原点O逆时针旋转θ度,得到旋转后的点p'(x', y')。
二、矩阵表示上面给出的旋转公式可以进一步用矩阵来表示。
假设一个点p在平面直角坐标系中的坐标是(x, y),我们可以用一个列矩阵来表示这个点:p = [x y]我们可以构造一个2x2的矩阵R来表示旋转矩阵:R = [cos(θ) -sin(θ)][sin(θ) cos(θ)]这个矩阵R就是一个绕原点O逆时针旋转θ度的旋转矩阵。
通过矩阵乘法,我们可以将点p与旋转矩阵R相乘,得到旋转后的点p'的坐标:p' = Rp具体计算过程如下:p' = [cos(θ) -sin(θ)] [x][sin(θ) cos(θ)] [y]= [x*cos(θ) - y*sin(θ)][x*sin(θ) + y*cos(θ)]可以看到,通过矩阵乘法同样可以得到旋转后的点p'的坐标,这与前面的公式是一致的。
矩阵表示的形式更加简洁和直观,也更适合在计算机程序中进行实现。
坐标系转换矩阵1. 介绍坐标系转换矩阵是数学中一种常用的工具,用于将一个坐标系中的点转换到另一个坐标系中。
在二维和三维空间中,坐标系转换矩阵可以表示为一个矩阵,通过乘法运算将原始坐标转换为目标坐标。
坐标系转换矩阵在计算机图形学、机器人学、物体定位以及航空航天等领域具有广泛的应用。
2. 二维坐标系转换矩阵2.1 平移矩阵平移矩阵用于将一个点在二维平面上沿 x 轴和 y 轴方向移动一定的距离。
平移矩阵可以表示为:[1 0 dx][0 1 dy][0 0 1 ]其中 dx 和 dy 分别表示在 x 轴和 y 轴上的平移距离。
通过乘法运算,可以将原始点的坐标 (x, y) 转换为移动后的坐标 (x+dx, y+dy)。
2.2 缩放矩阵缩放矩阵用于将一个点在二维平面上沿 x 轴和 y 轴方向进行放大或缩小。
缩放矩阵可以表示为:[sx 0 0][0 sy 0][0 0 1]其中 sx 和 sy 分别表示在 x 轴和 y 轴上的缩放比例。
通过乘法运算,可以将原始点的坐标 (x, y) 转换为缩放后的坐标 (sx x, sy y)。
2.3 旋转矩阵旋转矩阵用于将一个点在二维平面上绕原点进行旋转。
旋转矩阵可以表示为:[cosθ -sinθ 0][sinθ cosθ 0][0 0 1]其中θ 表示旋转角度。
通过乘法运算,可以将原始点的坐标 (x, y) 转换为绕原点旋转后的坐标 (x cosθ - y sinθ, x sinθ + y cosθ)。
2.4 总体转换矩阵总体转换矩阵可以通过平移、缩放和旋转矩阵的乘法运算得到。
假设需要将一个点从坐标系 A 转换到坐标系 B,首先可以将点的坐标通过平移矩阵从坐标系 A 转换到原点所在的坐标系,然后通过旋转矩阵将点的坐标围绕原点进行旋转,最后通过缩放矩阵将点的坐标进行放大或缩小,得到在坐标系 B 中的新坐标。
3. 三维坐标系转换矩阵三维坐标系转换矩阵与二维类似,只是需要增加一维。
施工坐标与测量坐标转换方法引言在工程施工过程中,测量是一个非常重要的环节,准确的测量结果可以确保施工质量和进度。
施工过程中使用的坐标系统通常与测量过程中使用的坐标系统不一致,因此需要进行坐标转换。
本文将介绍施工坐标与测量坐标之间的转换方法。
施工坐标系统施工坐标系统是指在施工过程中使用的坐标系统,通常是一个基于局部参考点的坐标系统。
施工坐标通常以一个固定点为基准,建立起三维直角坐标系。
施工坐标的原点一般选取工程中的一个固定点,比如控制点的位置。
测量坐标系统测量坐标系统是指在测量过程中使用的坐标系统,通常是一个基于全球定位系统(GPS)或全站仪的坐标系统。
测量坐标通常以一个全局参考点为基准,建立起三维直角坐标系。
测量坐标可以更准确地表示对象的位置和方向。
施工坐标与测量坐标转换方法施工坐标与测量坐标之间的转换需要通过一定的数学方法和计算来实现。
下面介绍几种常用的转换方法。
1. 三维旋转变换三维旋转变换是一种常用的施工坐标与测量坐标转换方法。
它通过旋转矩阵和平移矩阵来实现坐标的转换。
首先,需要通过一些已知的控制点和其在施工坐标和测量坐标下的坐标来确定旋转矩阵和平移矩阵。
然后,使用这些矩阵进行坐标的转换。
2. 三维仿射变换三维仿射变换是另一种常用的施工坐标与测量坐标转换方法。
它通过仿射变换矩阵来实现坐标的转换。
与三维旋转变换不同的是,三维仿射变换不仅可以进行旋转和平移,还可以进行缩放、错切和投影等操作。
使用已知的控制点和其在施工坐标和测量坐标下的坐标,可以确定仿射变换矩阵。
然后,使用这个矩阵进行坐标的转换。
3. 三角形相似性变换三角形相似性变换是一种简单的施工坐标与测量坐标转换方法。
它基于两个三角形之间的相似性来进行坐标的转换。
首先,在施工坐标中选择一个点,并在测量坐标中找到与之对应的点。
然后,通过这两个点和其在施工坐标和测量坐标下的坐标来确定缩放比例。
最后,使用这个缩放比例来进行其他点坐标的转换。
结论施工坐标与测量坐标之间的转换是工程施工过程中的重要环节。
两种七参数坐标转换方法七参数坐标转换方法是一种将不同坐标系之间的坐标进行转换的方法。
常用于地理信息系统(GIS)、大地测量学和空间测量学等领域。
以下介绍两种常见的七参数坐标转换方法:1.七参数最小二乘法:七参数最小二乘法是通过最小化两个坐标系之间的残差平方和来求解七个参数的方法。
假设有两个坐标系A和B,七个参数分别为平移量(ΔX,ΔY,ΔZ)、旋转角度(θX,θY,θZ)和尺度比例(k)。
通过找到最佳的七个参数值,使得在坐标系A和B之间的转换中,两个坐标系之间的差异最小。
2.矩阵变换法:矩阵变换法是将坐标系A和坐标系B之间的转换表示为一个矩阵的乘法运算。
这种方法将七个参数分别表示为一个3×3的旋转矩阵R和一个3×1的平移矩阵T。
具体的转换公式为:```BX=RX*AX+T```其中,BX和AX分别为坐标系B和坐标系A中的坐标值,RX为旋转矩阵,T为平移矩阵。
通过确定旋转矩阵和平移矩阵的数值,可以将坐标系A中的坐标转换为坐标系B中的坐标。
这两种七参数坐标转换方法在实际应用中都有其优缺点。
七参数最小二乘法在计算过程中需要通过迭代方法来找到最优的参数值,计算量较大;而矩阵变换法相对来说计算较为简单。
然而,七参数最小二乘法在处理大数据集时可能会得到更精确的结果。
对于具体的应用场景,可以根据实际需求选择合适的方法。
此外,在实际应用中,还有一些常见的改进七参数坐标转换方法,例如七参数地面控制点法和七参数线性组合法等。
这些方法通过引入更多的控制点或采用线性组合的方式,可以提高坐标转换的精度和稳定性。
总的来说,七参数坐标转换方法是地理信息系统、大地测量学和空间测量学等领域中常用的一种坐标转换方法,通过确定平移量、旋转角度和尺度比例等参数,可以将不同坐标系之间的坐标进行转换。
在实际应用中,可以根据具体需求选择合适的转换方法,并根据实际情况进行适当的改进。
世界坐标到相机坐标三维旋转矩阵世界坐标到相机坐标的转换可以使用三维旋转矩阵。
在计算机图形学和机器视觉领域,三维旋转矩阵用于将一个物体的坐标从一个坐标系变换到另一个坐标系。
在这种情况下,我们将使用一个特定的三维旋转矩阵来把世界坐标转换到相机坐标。
首先,让我们定义一些相关的术语。
- 世界坐标系(World Coordinate System):世界坐标系是一个固定的参考框架,用于描述三维世界中的物体位置。
通常情况下,我们将世界坐标系的原点设置在场景的中心。
- 相机坐标系(Camera Coordinate System):相机坐标系是相机的局部坐标系,在三维空间中描述相机的位置和朝向。
相机坐标系的原点通常设置在相机的位置上,相机的朝向和坐标系的轴方向相对应。
- 旋转矩阵(Rotation Matrix):旋转矩阵是一个3x3的正交矩阵,用于描述三维空间中的旋转变换。
旋转矩阵可以将一个向量从一个坐标系转换到另一个坐标系。
为了将一个点从世界坐标系转换到相机坐标系,我们需要知道相机的位置和朝向,以及相机坐标系与世界坐标系之间的旋转矩阵。
旋转矩阵可以通过欧拉角(Euler angles)或四元数(quaternions)来表示。
在这里,我们将使用欧拉角表示旋转。
欧拉角是指通过三个不同的角度来描述一个旋转操作,通常为绕X轴、Y轴和Z轴的旋转角度。
假设我们有一个三维向量P表示在世界坐标系中的某个点,我们希望将其转换到相机坐标系中,转换公式如下:P_camera = R * P_world - T其中,P_camera是在相机坐标系中的点,P_world是在世界坐标系中的点,R 是旋转矩阵,T是相机的位置。
旋转矩阵可以由相机的朝向计算得到。
在计算机图形学中,通常使用右手坐标系,其中X轴指向右边,Y轴指向上方,Z轴指向相机的朝向。
旋转矩阵可以通过以下步骤计算得到:1. 计算相机的朝向矢量:将X,Y,Z轴的旋转角度(pitch,yaw,roll)转换为弧度。
五轴坐标转换的原理和方法
五轴坐标转换是将一个坐标系中的点转换到另一个坐标系中的过程,常用于机器人控制、计算机图形学等领域。
其原理和方法如下:
原理:
五轴坐标转换基于欧几里得几何的变换原理。
在三维空间中,一个点在不同坐标系中的表示是相对的,可以通过坐标系之间的变换矩阵来实现转换。
方法:
1. 平移变换:平移变换是将一个坐标系中的点沿着某个方向移动一定距离,可以通过平移矩阵实现。
平移矩阵的形式为:
[1 0 0 dx]
[0 1 0 dy]
[0 0 1 dz]
[0 0 0 1 ]
其中,dx、dy、dz分别表示在x、y、z方向上的平移量。
2. 旋转变换:旋转变换是将一个坐标系中的点绕某个轴旋转一定角度,可以通过旋转矩阵实现。
常见的旋转矩阵包括绕x轴旋转、绕y轴旋转和绕z轴旋转三种。
以绕x轴旋转为例,旋转矩阵的形式为:
[ 1 0 0 0 ]
[ 0 cosθ-sinθ0 ]
[ 0 sinθcosθ0 ]
[ 0 0 0 1 ]
其中,θ表示旋转角度。
3. 缩放变换:缩放变换是改变一个坐标系中点的尺寸大小,可以通过缩放矩阵实现。
缩放矩阵的形式为:
[Sx 0 0 0]
[0 Sy 0 0]
[0 0 Sz 0]
[0 0 0 1]
其中,Sx、Sy、Sz分别表示在x、y、z方向上的缩放比例。
通过以上三种基本变换,可以实现任意坐标系之间的转换。
通常,五轴坐标转换会涉及到平移、旋转和缩放的组合使用,根据需要确定变换矩阵并执行相应的数学计算即可完成转换。
测绘技术中坐标转换的方法与步骤测绘技术中,坐标转换是一项重要的任务。
它涉及到将物理空间中的坐标转换为数字空间中的坐标,或者将一个坐标系统转换为另一个坐标系统。
在实践中,我们常常需要将不同地理坐标系统中的数据进行转换,以完成地图制作、测量和分析等工作。
本文将探讨测绘技术中坐标转换的方法与步骤。
一、坐标转换简介坐标转换是指将一个坐标系统中的点的位置转换为另一个坐标系统中的对应位置。
在测绘技术中,常见的坐标系统包括地理坐标系统、平面坐标系统和大地坐标系统等。
不同的坐标系统具有不同的基准和参考标准,因此需要进行坐标转换来实现数据的互通。
二、坐标转换的方法1. 参数转换法参数转换法是一种将一个坐标系统转换为另一个坐标系统的常用方法。
该方法通过建立两个坐标系统之间的参数转换关系来进行数据转换。
常见的参数包括平移参数、缩放参数和旋转参数等。
在进行坐标转换时,需要根据具体的参数进行计算和运算。
2. 矩阵转换法矩阵转换法是一种通过矩阵运算实现坐标转换的方法。
该方法利用矩阵的线性变换特性,建立起两个坐标系统之间的转换关系。
通过将一个坐标系统中的点坐标表示为矩阵形式,再通过矩阵运算进行坐标转换。
矩阵转换法较为精确,但计算较为复杂。
3. 公式转换法公式转换法是一种通过公式计算实现坐标转换的方法。
该方法通过建立两个坐标系统之间的数学关系,利用公式进行坐标转换。
在进行坐标转换时,需要根据具体的公式和计算过程进行计算和运算。
公式转换法相对简单,但需要事先确定好转换公式。
三、坐标转换的步骤1. 数据准备进行坐标转换前,需要准备好需要转换的坐标数据。
这包括原始坐标数据和目标坐标数据。
原始坐标数据是指需要进行转换的坐标数据,而目标坐标数据是指转换后的坐标数据。
数据的准确性和完整性对坐标转换的结果具有重要影响。
2. 参数计算根据所选用的转换方法,计算出相应的参数。
参数的计算依赖于具体的转换方法和转换公式。
在计算参数时,需要考虑到坐标系统的基准和参考标准,以及坐标轴的方向和单位等因素。
halcon 矩阵转换成正常坐标系矩阵概述说明1. 引言1.1 概述本文旨在介绍如何将Halcon矩阵转换成正常坐标系矩阵。
在计算机视觉领域,Halcon矩阵被广泛应用于图像处理和模式识别等方面。
然而,由于Halcon矩阵采用特殊的坐标系表示方法,与传统的正常坐标系存在一定的差异,因此经常需要进行相互转换。
本文将详细说明Halcon矩阵的概述、正常坐标系的概述以及二者之间的转换方法和步骤。
1.2 文章结构本文按照以下结构组织内容:首先,我们将介绍Halcon矩阵的定义、特性和应用领域,以使读者对其有一个全面的了解(第2节)。
接下来,我们将介绍正常坐标系的定义、特点及其与Halcon矩阵之间的关系(第3节)。
然后,我们将逐步介绍如何将Halcon矩阵转换成正常坐标系矩阵,并给出具体步骤和技巧(第4节)。
最后,在结论部分(第5节),我们将总结文章,并探讨存在的问题及未来改进方向。
1.3 目的本文的主要目的是帮助读者理解Halcon矩阵与正常坐标系之间的关系,并掌握将Halcon矩阵转换成正常坐标系矩阵的方法和步骤。
通过本文的学习,读者可以更好地应用Halcon矩阵于实际工作中,并在需要时进行转换,提高计算机视觉任务的准确性和效率。
以上为“1. 引言”部分内容,该部分概述了文章主题、结构和目的。
下面将进入第2节“Halcon矩阵的概述”。
2. Halcon矩阵的概述2.1 Halcon矩阵的定义Halcon是一种用于机器视觉和图像处理的软件库,它提供了强大的图像处理工具和函数。
在Halcon中,矩阵是一种常见的数据结构,用于表示图像或图形上的点、区域和变换等属性。
Halcon矩阵可以包含不同类型的元素,如像素值、坐标信息、尺寸参数等。
2.2 Halcon矩阵的特性Halcon矩阵具有以下几个重要特性:- 多种数据类型:Halcon支持多种数据类型的矩阵,包括整数型、浮点型、字符串型等。
这使得在图像处理和计算过程中能够灵活地处理不同类型的数据。
三维坐标系之间的转换关系通常由旋转矩阵R和平移矩阵T共同决定。
在大地测量、工程测量、摄影测量等领域中,坐标系之间的转换是必不可少的。
假设有两个坐标系A和B,以及一个点p在两个坐标系下的坐标分别为pA和pB。
那么,点p在A坐标系下的坐标可以通过乘以一个转换矩阵M得到,这个转换矩阵是由A坐标系到B坐标系的旋转矩阵R和平移矩阵T组成的。
具体来说,转换矩阵M可以表示为:
M = R * T
其中,R是旋转矩阵,表示从A坐标系到B坐标系的旋转;T是平移矩阵,表示从A坐标系到B坐标系的平移。
对于三维坐标系之间的转换,旋转矩阵R通常由三个旋转角确定,而平移矩阵T由三个平移分量确定。
通过将公共点的坐标代入转换矩阵M,可以得到非公共点在B坐标系下的坐标。
这个过程通常分为两步:首先由公共点坐标解算出转换参数(包括旋转角和平移分量),然后使用这些参数将非公共点在A坐标系下的坐标转换为B 坐标系下的坐标。
传统的三维坐标转换模型通常使用三个旋转角作为旋转参数,建立的模型是非线性的,需要使用泰勒级数展开等方法将其线性化,计算过程较为繁杂。
针对大旋角的坐标转换问题,多采用罗德里格矩阵表示旋转矩阵的坐标转换方法,仅有三个旋转参数,计算过程无需线性化,且能适用大旋角转换。
利用矩阵进行坐标转换
之前做拓扑图,本来打算整一套坐标系统在里面的,后来因为时间原因暂时用了最原始的方法实现。
现在稍稍得闲,重新开始思考这个问题。
不过在搜索的时候,意外发现.Net Framework类库中自带的有实现坐标系转换功能的类。
Reflector了一把,发现代码看不懂了——都是利用矩阵操作的。
矩阵这玩意儿,几年没用早忘完了。
于是认真学习了一把,顺便把如何用矩阵进行坐标转换的过程记录和注解一下。
文中部分内容摘取自MSDN,搜索“变换的矩阵表示形式”
即可找到。
首先review一下矩阵的基础知识:
m×n 矩阵是排列在m 行和n 列中的一系列数。
下图显示几个
矩阵。
可以通过将单个元素相加来加合两个尺寸相同的矩阵。
下图显示
了两个矩阵相加的示例。
m×n 矩阵可与一个n×p 矩阵相乘,结果为一个m×p 矩阵。
第一个矩阵的列数必须与第二个矩阵的行数相同。
例如,一个4×2 矩阵与一个2×3 矩阵相乘,产生一个4×3 矩阵。
矩阵的行列的平面点可视为矢量。
例如,(2, 5) 是具有两个组件的矢量,(3, 7, 1) 是具有三个组件的矢量。
两个矢量的点积定义如下:
(a, b) ? (c, d) = ac + bd
(a, b, c) ? (d, e, f) = ad + be + cf
例如,(2, 3) 和(5, 4) 的点积是(2)(5) + (3)(4) = 22。
(2, 5, 1) 和(4, 3, 1) 的点积是(2)(4) + (5)(3) + (1)(1) = 24。
请注意,两个矢量的点积是数字,而不是另一个矢量。
另外请注意,只有当两个矢量的
组件数相同时,才能计算点积。
将A(i, j) 作为矩阵 A 中第i 行、第j 列的项。
例如,A(3, 2)是矩阵 A 中第 3 行、第 2 列的项。
假定A、B 和 C 是矩阵,且
AB = C,则C 的项计算如下:
C(i, j) =(A 的第i 行)?(B 的第j 列)
下图显示了矩阵相乘的几个示例。
以第二个等式为例,假设等式两边的矩阵分别是a、b、c,1*3的矩阵和3*2的矩阵相乘,得到的结果为1*2的矩阵。
其中c[0][0] = a[0][0]*b[0][0]+a[0][1]*b[1][0]+a[0][2]*b[2][0],c[0][1]=a[0][0]*b[0][1]+a[0][1]*b[1][1]+a[0][2]*b[2][1]。
矩阵的加法、乘法,可以用来做坐标转换。
我们通常使用3*3(如果不需要旋转,则2*2的矩阵即可)的矩阵来做平面上的各种坐标转换,包括x/y轴的平移、旋转。
现在来看一个简单的坐标系转换的例子:假设我们的客户区分辨率是100*100,要在客户区中心点画一个点,这个点的坐标是(x, y)。
现在如果我们调整了客户区分辨率为400*300,此时如果还需要保持这个点的相对位置不变,计算他的坐标应该是(x * 400 / 100, y * 300 / 100)。
这个计算过程很简单,那么
用矩阵操作应该如何来实现呢?
我们将这个点视为一个1*2的矩阵,将其乘以一个2*2的矩阵,得出的仍然是一个1*2的矩阵,就是新的坐标了。
由于屏幕分辨率在
x、y轴分别扩大为原来的4倍和3倍,那么我们只要将点的x、y 轴坐标都扩大到原来的4、3倍即可。
公式如下:
等式左边的第二个矩阵,就是用来实现坐标转换的矩阵。
其中b[0][0]就是x轴的扩大倍数,b[1][1]就是在y轴上的扩大倍数。
这里面b[0][1]和b[1][0]永远是0。
坐标系的这种转换,叫做线性变换。
OK。
看完这个例子,是不是觉得用矩阵比直接计算还麻烦?嗯,对于这种简单的情况是这样的。
不过别急,继续看坐标系旋转的情况,如果现在要求这个客户区逆时针旋转30度,要保持这个点的相对位置不变,他的新坐标应该是多少呢?
普通的计算的公式就不陈述了,这就是个初中几何题目。
我们直接来看怎样通过矩阵操作实现。
首先看公式:在二维空间中,旋转可以用一个单一的角θ 定义。
作为约定,正角表示逆时针旋转。
关于
原点逆时针旋转θ 的矩阵是:
也就是说,逆时针旋转30度的新坐标就是:
当然,除此之外,坐标系还有平移,但是这个就简单了,只是一个简单的矩阵加法。
比如(x, y)向右平移一个单位,用矩阵就是[x, y]
+ [1, 0]就是是(x + 1, y)。
下图显示了应用于点(2, 1) 的几个变换:
前图中显示的所有变换都是线性变换。
某些其他变换(如平移)不是线性的,不能表示为与2×2 矩阵相乘的形式。
假定您要从点(2, 1) 开始,将其旋转90 度,在x 方向将其平移3 个单位,在y 方向将其平移 4 个单位。
可通过先使用矩阵乘法再使用矩阵加法来完
成此操作。
后面跟一平移(与1×2 矩阵相加)的线性变换(与2×2 矩阵相乘)称为仿射变换,如上图所示。
放射变换(先乘后加)可以通过乘以一个3*3的矩阵来实现,若要使其起作用,平面上的点必须存储于具有虚拟第三坐标的1×3 矩阵中。
通常的方法是使所有的第三坐标等于1。
例如,矩阵[2 1 1] 代表点(2, 1)。
下图演示了表示为与单个3×3 矩阵相乘的仿射变换(旋转90 度;在x 方向上平移 3 个单位,在y 方向上平移 4 个单位):
在前面的示例中,点(2, 1) 映射到了点(2, 6)。
请注意,3×3 矩阵的第三列包含数字0,0,1。
对于仿射变换的3×3 矩阵而言,情况将总是如此。
重要的数字是列 1 和列 2 中的 6 个数字。
矩阵左上角的2×2 部分表示变换的线性部分,第 3 行中的前两项表示平
移。
在使用3*3的矩阵做仿射变换时候,表示点的矩阵变成了一个1*3矩阵,这个矩阵中的最后一个值(a[0][2])必须设置成1。
对于3*3矩阵b,其最后一列的值是多少是没有关系的,因为他们不会影响结果中的前两列。
不过如上,经常将他们设置为0,0,1。
这一列对于坐标转换的结果并没有任何影响,但是他们是必须的,因为矩阵相乘必须满足开篇所讲的“相乘的两个矩阵第一个矩阵的列数必须与
第二个矩阵的行数相同”。
在.Net Framework中,又一个矩阵类“Matrix”。
其内置了点坐标转换(TransformPoints)、平移(Translate)、缩放(Scale)、旋转(Rotate)方法。
下面的示例创建了复合变换(先旋转30 度,再在y 方向上缩放 2 倍,然后在x 方向平移 5 个单位)的矩阵:
Matrix myMatrix = new Matrix();
myMatrix.Rotate(30);
myMatrix.Scale(1, 2, MatrixOrder.Append);
myMatrix.Translate(5, 0, MatrixOrder.Append);
除了Matrix类以外,.Net Framework中也有其他用于坐标系转换的类,比如System.Drawing.Graphics。
具体用法请查阅相关文
档。
以上只是利用矩阵进行平面坐标系转换的方法。
如果是三位坐标系,也是可以利用矩阵来操作的,但Matrix类不行,因为其本身的定位就是“封装表示几何变换的 3 x 3 仿射矩阵”。
不过,可以附上几个三维空间的旋转公式:
上面是分别绕单个轴旋转的公式。
复杂的旋转可以通过这三个公式组合而成,任何 3 维旋转矩阵都可以用这三个角θx, θy, 和θz 来刻画,并且可以表示为roll, pitch 和yaw 矩阵的乘积。