3D空间表征基础

本文所指三维空间中的表征默认是在一组单位正交基构成的右手系下所进行的欧氏变换。欧氏变换(刚性变换):改变物体的空间位置,不改变形状、大小,包括旋转变换和平移变换。

向量表征和基本运算

空间中的点/向量可以表征为a⃗=e⃗1,e⃗2,e⃗3a1,a2,a3T\vec a=\\vec e_1, \\vec e_2, \\vec e_3a_1, a_2, a_3^Ta =e 1,e 2,e 3a1,a2,a3T

向量点积
a⃗⋅b⃗=a⃗Tb⃗=∑i=13aibi=∣a⃗∣∣b⃗∣cos<a⃗,b⃗>\vec a \cdot \vec b =\vec a^T \vec b = \sum_{i=1}^{3}{a_i b_i} = |\vec a||\vec b|cos<\vec a, \vec b>a ⋅b =a Tb =∑i=13aibi=∣a ∣∣b ∣cos<a ,b >

向量叉积
a⃗×b⃗=∥e⃗1e⃗2e⃗3a1a2a3b1b2b3∥=a⃗ ˆ b⃗\vec a \times \vec b = {\begin{Vmatrix} \vec e_1 & \vec e_2 & \vec e_3 \\ a_1 & a_2 & a_3 \\ b_1 & b_2 & b_3 \end{Vmatrix}} = \vec a \ \^{} \ \vec ba ×b = e 1a1b1e 2a2b2e 3a3b3 =a ˆ b , a⃗ ˆ\vec a \ \^{}a ˆ是用a⃗\vec aa 构建的一个反对称矩阵,对角线上元素从左到右从上到下依次为−a3,a2,−a1-a_3, a_2, -a_1−a3,a2,−a1。

刚体运动可以用欧式变换来表征,尺度、各个面的角度等性质不会变。欧氏变换包括旋转和平移

旋转变换

给定两组单位正交基e⃗1,e⃗2,e⃗3,e⃗1′,e⃗2′,e⃗3′\\vec e_1, \\vec e_2, \\vec e_3, \\vec e_1', \\vec e_2', \\vec e_3'e 1,e 2,e 3,e 1′,e 2′,e 3′,表征了两个原点重合的坐标系。

同一向量在两组基下的表征分别为e⃗1,e⃗2,e⃗3a1,a2,a3T=e⃗1′,e⃗2′,e⃗3′a1′,a2′,a3′T\\vec e_1, \\vec e_2, \\vec e_3a_1, a_2, a_3^T = \\vec e_1', \\vec e_2', \\vec e_3'a_1', a_2', a_3'^Te 1,e 2,e 3a1,a2,a3T=e 1′,e 2′,e 3′a1′,a2′,a3′T,式两边同时左乘e⃗1,e⃗2,e⃗3T\\vec e_1, \\vec e_2, \\vec e_3^Te 1,e 2,e 3T可以自然得到旋转矩阵表征,矩阵R\bold RR表征了从坐标系2到坐标系1的旋转变换。由于是单位正交基,等式左边前面左乘的结果为单位矩阵,等式右边矩阵的结果
R=e1Te1′e1Te2′e1Te3′e2Te1′e2Te2′e2Te3′e3Te1′e3Te2′e3Te3′ \bold R=\begin{bmatrix} e_1^Te_1' & e_1^Te_2' & e_1^Te_3' \\ e_2^Te_1' & e_2^Te_2' & e_2^Te_3' \\ e_3^Te_1' & e_3^Te_2' & e_3^Te_3' \end{bmatrix} R= e1Te1′e2Te1′e3Te1′e1Te2′e2Te2′e3Te2′e1Te3′e2Te3′e3Te3′

由于是两组单位正交基,得到的结果为各轴之间的夹角,并且det(R)=1det(\bold R) = 1det(R)=1。

要反过来得到R−1\bold R^{-1}R−1,只需要对原式两边左乘e⃗1′,e⃗2′,e⃗3′T\\vec e_1', \\vec e_2', \\vec e_3'^Te 1′,e 2′,e 3′T,得到e⃗1′,e⃗2′,e⃗3′Te⃗1,e⃗2,e⃗3=RT\\vec e_1', \\vec e_2', \\vec e_3'^T \\vec e_1, \\vec e_2, \\vec e_3 = \bold R^Te 1′,e 2′,e 3′Te 1,e 2,e 3=RT,故旋转矩阵R\bold RR为正交矩阵。

旋转矩阵所在的集合为特殊正交群
SO(n)={R∈∣RRT=I,det(R)=1}SO(n) = \{R\in|\bold R\bold R^T = \bold I, det(\bold R) = 1\}SO(n)={R∈∣RRT=I,det(R)=1}

平移变换

两个不重合的坐标系,在坐标系1下坐标系1到坐标系2原点的向量为t12t_{12}t12,坐标系2到坐标系1的旋转变换为R12R_{12}R12,则
a1=R12a12+t12a_{1} = \bold R_{12}a_{12}+\bold t_{12}a1=R12a12+t12

扩展为齐次坐标的四维向量,则变换矩阵可以表征为
T=Rt01,R∈R3×3,t∈R3 T=\begin{bmatrix} \bold R & \bold t \\ \bold 0 & 1 \\ \end{bmatrix}, \bold R \in \mathbb{R}^{3\times 3}, \bold t \in \mathbb{R}^3 T=R0t1,R∈R3×3,t∈R3

变换a1=Ta2\bold a_1 = \bold T \bold a_2a1=Ta2
T\bold TT所在的集合为特殊欧式群SE(3)SE(3)SE(3)

相关推荐
天空之城--40 分钟前
Claude Code 高效开发 Web 2D/3D 完全指南:心法、自定义 Skill 体系与社区技能包实战
前端·3d
清风笑烟语19 小时前
rustfs 集群部署
3d
还是大剑师兰特1 天前
Unity 从零搭建简易3D场景(新手分步教程)
3d·unity·游戏引擎
EQ-雪梨蛋花汤1 天前
Android 3D 开发教程(三):Sceneform-EQR 配置 PBR 材质、光照、相机与实时阴影
android·3d·材质
弈语道破AI1 天前
3D渲染不再熬时间!即梦 Seedance 2.5 具备3D白模渲染功能的AI视频生成工具
人工智能·3d·音视频
答案—answer2 天前
VibeCoding 能做到什么程度?我用它做了一座 3D 数字博物馆
3d·ai编程·threejs·vibecoding
玖玥拾2 天前
Unity3D RPG 入门项目(四)背包拖拽、物品悬浮提示、项目开发思维
3d·unity·游戏引擎
cyadyx3 天前
【Three.js】Three.js 中加载 3D 模型
前端·javascript·3d
chaoyuanl3 天前
悬空玻璃剧场源头厂家选型全解析|270°裸眼3D悬空玻璃剧场投资避坑指南
大数据·人工智能·3d·xr·娱乐·mr
在下胡三汉3 天前
GLTF vs OBJ vs FBX vs GLB:选择合适的 3D 文件格式,怎么获取下载
3d