大家好,欢迎来到IT知识分享网。
文章目录
一、四种空间
1.1 定义和对比
- 标量空间:只有标量;
- 向量空间(Vector space):除了标量,还有向量;
- 仿射空间(Affine space):除了标量、向量,还有点。向量空间没有位置的概念,所以不能表述几何物体,因此需要用到仿射空间;(对应齐次坐标系)
- 欧几里得空间(Euclidean space):除了标量、向量,还有距离。仿射空间定义了点,包含了构建几何模型的必要元素,但是仿射空间没有定义长度的概念,欧几里得空间引入了这个概念。(对应欧几里得坐标系)
1.2 齐次坐标系
若在三维空间中有一个向量表示为 v = ( a , b , c ) v=(a, b, c) v=(a,b,c),即 v = a i + b j + c z v=ai+bj+cz v=ai+bj+cz,那么表示为在三维仿射空间中的一个数学对象 o b j e c t = a i + b j + c z + d O object=ai+bj+cz+dO object=ai+bj+cz+dO。当 d=0 时,object 就是一个向量;当 d≠0 时,object 就是一个向量加上一个点,也就是一个点。因此,在齐次坐标系下,既可以表示向量,又可以表示点。在齐次坐标系中,向量的坐标形式为 v = ( x , y , z , 0 ) v=(x, y, z, 0) v=(x,y,z,0)用以表示 v = a i + b j + c z v=ai+bj+cz v=ai+bj+cz;点的坐标形式为 P = ( a , b , c , d ) P=(a, b, c, d) P=(a,b,c,d)用以表示 v = ( a / d ) i + ( b / d ) j + ( c / d ) z + O v=(a/d)i+(b/d)j+(c/d)z+O v=(a/d)i+(b/d)j+(c/d)z+O。也就是说,在三维空间中可以认为 ( x , y , z ) (x, y, z) (x,y,z)是点,也可以认为是向量,
齐次坐标:使用 N+1 维坐标来表示 N 维坐标。齐次坐标具有规模不变性,同一点可以被无数个齐次坐标表达 ( X , Y , 1 ) → ( a x , a y , a ) (X, Y, 1)\rightarrow(ax, ay, a) (X,Y,1)→(ax,ay,a)齐次坐标转化为笛卡尔坐标可以通过同除最后一项得到。在计算机图形学中,为了统一将平移、旋转、缩放等用矩阵表示,需要引入齐次坐标。比如使用 2 ∗ 2 2*2 2∗2的矩阵没有办法描述平移操作,需要引入 3 ∗ 3 3*3 3∗3的矩阵,才能统一描述二维中的平移、旋转、缩放等操作。同理,必须使用 4 ∗ 4 4*4 4∗4的矩阵才能描述三维变换。
二、刚性变换
2.1 定义
只有平移和旋转,物体的形状不发生改变的变换。
2.2 平移
2.3 旋转
二维旋转是围绕一个点进行旋转,三维旋转是围绕一个轴进行旋转。
一文读懂图像中点的坐标变换(刚体变换,相似变换,仿射变换,投影变换)
Python 3D坐标系下的点的转换矩阵(平移、缩放、旋转、错切)
2.3.1 二维
2.3.1.1 绕原点
2.3.1.2 绕任意点
绕任意点旋转可以转换为绕原点的旋转,处理思路:①首先将旋转点移动到原点处;②执行绕原点旋转;③再将旋转点移回到原来位置。也就是说,绕任意点的旋转可以处理为:平移+绕原点旋转+平移。因此,绕任意点旋转的旋转矩阵为:
M = [ 1 0 t x 0 1 t y 0 0 1 ] [ c o s θ − s i n θ 0 s i n θ c o s θ 0 0 0 1 ] [ 1 0 − t x 0 1 − t y 0 0 1 ] = [ c o s θ − s i n θ ( 1 − c o s θ ) t x + t y s i n θ s i n θ c o s θ ( 1 − c o s θ ) t y − t x s i n θ 0 0 1 ] \begin{align}M&=\left[\begin{matrix} 1\quad0\quad t_x\\ 0\quad1\quad t_y\\ 0\quad 0 \quad\,\, 1 \end{matrix}\right]\left[\begin{matrix} cos\theta\quad-sin\theta\quad 0\\ sin\theta\uad cos\theta\quad 0\\ 0\uad\,\,\,\,\, 0 \uad\,\,\,\,\, 1 \end{matrix}\right] \left[\begin{matrix} 1\quad0\quad -t_x\\ 0\quad1\quad -t_y\\ 0\quad 0 \uad\,\,\, 1 \end{matrix}\right]\notag\\ &\notag\\ &=\left[\begin{matrix} cos\theta\quad-sin\theta\quad (1-cos\theta)t_x+t_ysin\theta\\ sin\theta\uad cos\theta\quad (1-cos\theta)t_y-t_xsin\theta\\ 0\uad\uad\uad 0 \uad\uad\uad 1 \end{matrix}\right] \notag\end{align} M=
10tx01ty001
cosθ−sinθ0sinθcosθ0001
10−tx01−ty001
=
cosθ−sinθ(1−cosθ)tx+tysinθsinθcosθ(1−cosθ)ty−txsinθ001
2.3.2 三维
3维旋转矩阵推导与助记
2.3.2.1 绕x轴
2.3.2.2 绕y轴
2.3.2.3 绕z轴
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/121568.html