这篇文章本来应该是前天就写的,按计划应该是和线性规划有关的内容。但是计划赶不上变换,中间插播了四元数。四元数里面的坑还真是不少,浪费了很多时间。学完四元数之后写了一篇笔记四元数与旋转变换,有需要的可以下载来看一看。
从直观上来讲,四元数还是很好理解的。四元数包含的信息就两个:旋转轴和绕这个轴旋转的角度。比如说有个四元数
q
=
(
s
i
n
θ
2
n
,
c
o
s
θ
2
)
\mathbf{q}=(\mathrm{sin}\frac{\theta}{2} \mathbf{n},\mathrm{cos}\frac{\theta}{2})
q=(sin2θn,cos2θ),其中
n
\mathbf{n}
n就是旋转轴,
θ
\theta
θ就是旋转角,并且这两个量都是在世界坐标系中的表达式。现在举个例子,看看四元数如何实现旋转。令
n
=
(
0
,
0
,
1
)
\mathbf{n}=(0,0,1)
n=(0,0,1),
θ
=
π
6
。
\theta = \frac{\pi}{6}。
θ=6π。并假设有一个点P,它的世界坐标是
(
x
w
,
y
w
,
z
w
)
=
(
6
,
6
,
6
)
(x_\mathbf{w},y_\mathbf{w},z_\mathbf{w})=(6,6,6)
(xw,yw,zw)=(6,6,6),它的局部坐标是
(
x
L
,
y
L
,
z
L
)
=
(
0
,
1
,
0
)
(x_\mathbf{L},y_\mathbf{L},z_\mathbf{L})=(0,1,0)
(xL,yL,zL)=(0,1,0),它的局部坐标系原点的世界坐标是(6,5,6)。那么现在我们让点P绕
n
\mathbf{n}
n轴旋转
θ
\theta
θ角所得到的P点的世界坐标是多少呢?我们先用四元数的方法来计算一下,
q
p
q
−
1
=
(
−
1
2
,
3
2
,
0
,
0
)
\mathbf{qpq}^{-1}=(-\frac{1}{2},\frac{\sqrt{3}}{2},0,0)
qpq−1=(−21,23,0,0),其中
p
=
(
x
L
,
y
L
,
z
L
,
0
)
p=(x_\mathbf{L},y_\mathbf{L},z_\mathbf{L},0)
p=(xL,yL,zL,0)。这样的结果看起来有点莫名其妙,实际上还需要加上局部坐标系原点在世界坐标系中的坐标才能得到变换之后的P点的新坐标:
P
n
e
w
=
(
−
1
2
,
3
2
,
0
)
+
(
6
,
5
,
6
)
=
(
11
2
,
5
+
3
2
,
6
)
P_{new}=(-\frac{1}{2},\frac{\sqrt{3}}{2},0)+(6,5,6)=(\frac{11}{2},5+\frac{\sqrt{3}}{2},6)
Pnew=(−21,23,0)+(6,5,6)=(211,5+23,6)。如果我们通过几何方法来求取新坐标,就会发现只给轴
n
=
(
0
,
0
,
1
)
\mathbf{n}=(0,0,1)
n=(0,0,1)和
θ
=
π
6
\theta=\frac{\pi}{6}
θ=6π是不能够完成旋转操作的,因为
n
=
(
0
,
0
,
1
)
\mathbf{n}=(0,0,1)
n=(0,0,1)只代表了旋转轴的方向,没有说明旋转轴在什么位置。观察四元数的处理,就可以知道,旋转轴必须要经过局部坐标系原点在世界坐标系中的位置。这样一来,几何方法和四元数方法得到的结果就吻合了 。
用四元数来处理旋转的时候它的思路是固定的,这也就意味着它在某些情况下的处理比较麻烦,需要转化。它的好处我觉得就是在插值的时候计算量小一些,方便设计旋转规律。具体内容见上面的链接资源。
四元数与旋转矩阵
最新推荐文章于 2023-02-27 14:56:38 发布