|
发布时间: 2018-04-16 |
图像理解和计算机视觉 |
|
|
收稿日期: 2017-03-24; 修回日期: 2017-10-20
基金项目: 国家自然科学基金项目(61472466,11601115)
第一作者简介:
邢燕(1977-), 女, 副教授, 2009年于合肥工业大学获计算机应用技术专业博士学位, 主要研究方向为计算机辅助几何设计与计算机图形学、图像处理等。E-mail:xy1128@126.com.
中图法分类号: TP391.72
文献标识码: A
文章编号: 1006-8961(2018)04-0534-08
|
摘要
目的
构造一类
关键词
单位四元数; 朝向; 样条; C3连续性; 插值; 关键帧动画
Abstract
Objective
Unit quaternion represents rotation more compactly and intuitively than rotation matrix and is superior to Euler angle parameterization in avoiding gimbal lock. This study constructs a class of
Key words
unit quaternion; orientation; spline; C3-continuity; interpolation; key frame animation
0 引言
朝向的插值研究是计算机动画、机器人控制和飞行器导航中一个重要的问题。常见的朝向表示方法有欧拉角法、正交矩阵表示法和单位四元数表示法。由于四元数在旋转表示上形式简洁、计算高效,而且避免了万向节锁现象,因此,单位四元数朝向曲线的设计和研究引起了大批学者的关注[1-14]。
19世纪40年代爱尔兰数学家Hamilton最先提出四元数的概念。1985年Shoemake[1]首次把四元数引入到计算机图形学中,利用单位四元数对旋转的表示,借助球面线性插值(Slerp)公式,构造了
在
本文提出一种基于5次多项式的单位四元数插值样条曲线构造方法,这类单位四元数曲线不但能够精确地插值任意给定的数据点序列,而且在等距节点下能够达到
1 四元数的定义和运算
称
给定四元数
加减:
点乘:
$ \begin{array}{l} 乘法:{\mathit{\boldsymbol{q}}_1}{\mathit{\boldsymbol{q}}_2} = \left( {{a_1}{a_2} - {b_1}{b_2} - {c_1}{c_2} - {d_1}{d_2}} \right) + \\ \;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\left( {{a_1}{b_2} - {b_1}{a_2} - {c_1}{d_2} - {d_1}{c_2}} \right){\rm{i}} + \\ \;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\left( {{a_1}{c_2} + {c_1}{a_2} + {d_1}{b_2} - {b_1}{d_2}} \right){\rm{j}} + \\ \;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\left( {{a_1}{d_2} + {d_1}{a_2} + {b_1}{c_2} - {c_1}{b_2}} \right){\rm{k}} \end{array} $ |
注:四元数的乘法不满足交换律。
共轭:
注:两个四元数
模:
若
逆:
单位四元数
$ \mathit{\boldsymbol{q}} = \cos \left( \theta \right) + \mathit{\boldsymbol{n}}\sin \left( \theta \right) = \exp \left( {\theta \mathit{\boldsymbol{n}}} \right) $ |
式中,
单位四元数
$ \ln \left( \mathit{\boldsymbol{q}} \right) = \theta \mathit{\boldsymbol{n}} $ |
单位四元数
单数四元数
特别地,当
球面线性插值公式:
2 ${C^3}$ 连续的单位四元数插值样条曲线
2.1 5次多项式插值样条曲线
受文献[15]的启发,设计以下的5次多项式调配函数。
定义1 对于
$ \left\{ \begin{array}{l} {B_0}\left( t \right) = - \frac{5}{{16}}t{\left( {1 - t} \right)^4}\\ {B_1}\left( t \right) = \frac{1}{{16}}\left( {16 - 40{t^2} + 45{t^4} - 21{t^5}} \right)\\ {B_{\bf{2}}}\left( t \right) = \frac{1}{{16}}\left[\begin{array}{l} 16-40{\left( {1-t} \right)^2} + \\ 45{\left( {1-t} \right)^4} - 21{\left( {1 - t} \right)^5} \end{array} \right]\\ {B_3}\left( t \right) = - \frac{5}{{16}}{t^4}\left( {1 - t} \right) \end{array} \right. $ | (1) |
为插值样条的调配函数。
图 1为定义1中调配函数的图像。
定义2 给定数据点
$ P\left( t \right) = \bigcup\limits_{i = 1}^{n - 1} {{P_i}\left( t \right)}, t \in \left[{0, 1} \right] $ | (2) |
为5次多项式插值样条曲线,其中
$ \begin{array}{*{20}{c}} {{P_i}\left( t \right) = \sum\limits_{j = 0}^3 {{B_j}\left( t \right){p_{i + j - 1}}} }\\ {i = 1, 2, \cdots, n - 1} \end{array} $ | (3) |
为第
定理1 给定控制点集
证明:通过对式(3)直接计算可得
$ {P_i}\left( 0 \right) = {p_i} $ |
$ {P_i}\left( 1 \right) = {p_{i + 1}} $ |
$ {{P'}_i}\left( 0 \right) = \frac{5}{{16}}\left( {{p_{i + 1}} - {p_{i - 1}}} \right) $ |
$ {{P'}_i}\left( 1 \right) = \frac{5}{{16}}\left( {{p_{i + 2}} - {p_i}} \right) $ |
$ {{P''}_i}\left( 0 \right) = \frac{5}{2}\left( {{p_{i - 1}} - 2{p_i} + {p_{i + 1}}} \right) $ |
$ {{P''}_i}\left( 1 \right) = \frac{5}{2}\left( {{p_i} - 2{p_{i + 1}} + {p_{i + 2}}} \right) $ |
$ {{P'''}_i}\left( 0 \right) = \frac{{45}}{4}\left( {{p_{i + 1}} - {p_{i - 1}}} \right) $ |
$ {{P'''}_i}\left( 1 \right) = \frac{{45}}{4}\left( {{p_{i + 2}} - {p_i}} \right) $ |
因此,
曲线
所以曲线
2.2 基于5次多项式的单位四元数插值样条曲线的构造及连续性
定义3 给定
$ Q\left( t \right) = \bigcup\limits_{i = 1}^{n - 1} {{Q_i}\left( t \right)}, t \in \left[{0, 1} \right] $ | (4) |
为基于5次多项式的单位四元数插值样条曲线,其中
$ \begin{array}{*{20}{c}} {{Q_i}\left( t \right) = \mathit{\boldsymbol{q}}_{i - 1}^{{{\tilde B}_0}\left( t \right)}\prod\limits_{j = 1}^3 {{{\left( {\mathit{\boldsymbol{q}}_{i + j - 2}^{ - 1}{\mathit{\boldsymbol{q}}_{i + j - 1}}} \right)}^{{{\tilde B}_j}\left( t \right)}}} }\\ {i = 1, 2, \cdots, n - 1} \end{array} $ | (5) |
为第
$ \begin{array}{*{20}{c}} {{{\tilde B}_j}\left( t \right) = \sum\limits_{i = j}^3 {{B_i}\left( t \right)} }\\ {j = 0, 1, 2, 3;t \in \left[{0, 1} \right]} \end{array} $ | (6) |
图 2为定义3中累和形式的调配函数的图像。
这样定义的单位四元数插值样条曲线保持了5次多项式插值样条曲线许多重要的性质,如插值性和
定理2 给定方向序列
证明:由式(1)和式(6),不难求得
$ {{\tilde B}_0}\left( t \right) \equiv 1, \;\;\;\;{{\tilde B}_1}\left( 0 \right) = 1, \;\;\;\;\;{{\tilde B}_2}\left( 0 \right) = 0, \;\;\;\;{{\tilde B}_3}\left( 0 \right) = 0, $ |
$ {{\tilde B}_1}\left( 1 \right) = 1, \;\;\;\;{{\tilde B}_2}\left( 1 \right) = 1, \;\;\;\;\;{{\tilde B}_3}\left( 1 \right) = 0, $ |
$ \tilde B_0^{\left( k \right)}\left( t \right) \equiv 0, \;\;\;\;{{\tilde B'}_1}\left( 0 \right) = \frac{5}{{16}}, \;\;\;{{\tilde B'}_2}\left( 0 \right) = \frac{5}{{16}}, $ |
$ {{\tilde B'}_3}\left( 0 \right) = 0, \;\;\;\;\left( {k \ge 1} \right)\;\;\;\;\;{{\tilde B'}_1}\left( 1 \right) = 0, $ |
$ {{\tilde B'}_2}\left( 1 \right) = \frac{5}{{16}}, \;\;\;\;{{\tilde B'}_3}\left( 1 \right) = \frac{5}{{16}}, \;\;\;\;{{\tilde B''}_1}\left( 0 \right) = - \frac{5}{2}, $ |
$ {{\tilde B''}_2}\left( 0 \right) = \frac{5}{2}, \;\;\;\;{{\tilde B''}_3}\left( 0 \right) = 0, \;\;\;\;{{\tilde B''}_1}\left( 1 \right) = 0, $ |
$ {{\tilde B''}_2}\left( 1 \right) = - \frac{5}{2}, \;\;\;\;{{\tilde B''}_3}\left( 1 \right) = \frac{5}{2}, \;\;\;\;{{\tilde B'''}_1}\left( 0 \right) = \frac{{45}}{4}, $ |
$ {{\tilde B'''}_2}\left( 0 \right) = \frac{{45}}{4}, \;\;\;\;\;{{\tilde B'''}_3}\left( 0 \right) = 0, \;\;\;\;{{\tilde B'''}_1}\left( 1 \right) = 0, $ |
$ {{\tilde B'''}_2}\left( 1 \right) = \frac{{45}}{4}, \;\;\;\;{{\tilde B'''}_3}\left( 1 \right) = \frac{{45}}{4}。$ |
式(5)等价于
$ \begin{array}{*{20}{c}} {{Q_i}\left( t \right) = {\mathit{\boldsymbol{q}}_{i - 1}}{{\left( {\mathit{\boldsymbol{q}}_{i - 1}^{ - 1}{\mathit{\boldsymbol{q}}_i}} \right)}^{{{\tilde B}_1}\left( t \right)}}{{\left( {\mathit{\boldsymbol{q}}_i^{ - 1}{\mathit{\boldsymbol{q}}_{i + 1}}} \right)}^{{{\tilde B}_2}\left( t \right)}}}\\ {{{\left( {\mathit{\boldsymbol{q}}_{i + 1}^{ - 1}{\mathit{\boldsymbol{q}}_{i + 2}}} \right)}^{{{\tilde B}_3}\left( t \right)}}} \end{array} $ | (7) |
因此
即第
由此可得曲线的
$ {Q_{i + 1}}\left( 0 \right) = {\mathit{\boldsymbol{q}}_{i + 1}} = {Q_i}\left( 1 \right) $ | (8) |
求
$ \begin{array}{*{20}{c}} {{{Q'}_i}\left( t \right) = {\mathit{\boldsymbol{q}}_{i - 1}}{{\left[{{{\left( {\mathit{\boldsymbol{q}}_{i-1}^{-1}{\mathit{\boldsymbol{q}}_i}} \right)}^{{{\tilde B}_1}\left( t \right)}}} \right]}^\prime }{{\left( {\mathit{\boldsymbol{q}}_i^{ - 1}{\mathit{\boldsymbol{q}}_{i + 1}}} \right)}^{{{\tilde B}_2}\left( t \right)}}}\\ {{{\left( {\mathit{\boldsymbol{q}}_{i + 1}^{ - 1}{\mathit{\boldsymbol{q}}_{i + 2}}} \right)}^{{{\tilde B}_3}\left( t \right)}} + {\mathit{\boldsymbol{q}}_{i - 1}}{{\left( {\mathit{\boldsymbol{q}}_{i - 1}^{ - 1}{\mathit{\boldsymbol{q}}_i}} \right)}^{{{\tilde B}_1}\left( t \right)}}{{\left[{{{\left( {\mathit{\boldsymbol{q}}_i^{-1}{\mathit{\boldsymbol{q}}_{i + 1}}} \right)}^{{{\tilde B}_2}\left( t \right)}}} \right]}^\prime }}\\ {{{\left( {\mathit{\boldsymbol{q}}_{i + 1}^{ - 1}{\mathit{\boldsymbol{q}}_{i + 2}}} \right)}^{{{\tilde B}_3}\left( t \right)}} + {\mathit{\boldsymbol{q}}_{i - 1}}{{\left( {\mathit{\boldsymbol{q}}_{i - 1}^{ - 1}{\mathit{\boldsymbol{q}}_i}} \right)}^{{{\tilde B}_1}\left( t \right)}}{{\left( {\mathit{\boldsymbol{q}}_i^{ - 1}{\mathit{\boldsymbol{q}}_{i + 1}}} \right)}^{{{\tilde B}_2}\left( t \right)}}}\\ {{{\left[{{{\left( {\mathit{\boldsymbol{q}}_{i + 1}^{-1}{\mathit{\boldsymbol{q}}_{i + 2}}} \right)}^{{{\tilde B}_3}\left( t \right)}}} \right]}^\prime }} \end{array} $ |
式中
$ \begin{array}{*{20}{c}} {{{\left[{{{\left( {\mathit{\boldsymbol{q}}_{i-1}^{-1}{\mathit{\boldsymbol{q}}_i}} \right)}^{{{\tilde B}_1}\left( t \right)}}} \right]}^\prime } = {{\left( {\mathit{\boldsymbol{q}}_{i - 1}^{ - 1}{\mathit{\boldsymbol{q}}_i}} \right)}^{{{\tilde B}_1}\left( t \right)}}\left[{{{\left( {{{\tilde B}_1}\left( t \right)} \right)}^\prime }\ln \left( {\mathit{\boldsymbol{q}}_{i-1}^{-1}{q_i}} \right)} \right], }\\ {{{\left[{{{\left( {\mathit{\boldsymbol{q}}_i^{-1}{\mathit{\boldsymbol{q}}_{i + 1}}} \right)}^{{{\tilde B}_2}\left( t \right)}}} \right]}^\prime } = {{\left( {\mathit{\boldsymbol{q}}_i^{ - 1}{\mathit{\boldsymbol{q}}_{i + 1}}} \right)}^{{{\tilde B}_2}\left( t \right)}}}\\ {\left[{{{\left( {{{\tilde B}_2}\left( t \right)} \right)}^\prime }\ln \left( {\mathit{\boldsymbol{q}}_i^{-1}{\mathit{\boldsymbol{q}}_{i + 1}}} \right)} \right]{{\left[{{{\left( {\mathit{\boldsymbol{q}}_{i + 1}^{-1}{\mathit{\boldsymbol{q}}_{i + 2}}} \right)}^{{{\tilde B}_3}\left( t \right)}}} \right]}^\prime } = }\\ {{{\left( {\mathit{\boldsymbol{q}}_{i + 1}^{ - 1}{\mathit{\boldsymbol{q}}_{i + 2}}} \right)}^{{{\tilde B}_3}\left( t \right)}}\left[{{{\left( {{{\tilde B}_3}\left( t \right)} \right)}^\prime }\ln \left( {\mathit{\boldsymbol{q}}_{i + 1}^{-1}{\mathit{\boldsymbol{q}}_{i + 2}}} \right)} \right]} \end{array} $ |
通过计算得到
$ \begin{array}{*{20}{c}} {{{Q'}_i}\left( 0 \right) = \frac{5}{{16}}{\mathit{\boldsymbol{q}}_i}\left( {\ln \left( {\mathit{\boldsymbol{q}}_{i - 1}^{ - 1}{\mathit{\boldsymbol{q}}_i}} \right) + \ln \left( {\mathit{\boldsymbol{q}}_i^{ - 1}{\mathit{\boldsymbol{q}}_{i + 1}}} \right)} \right)}\\ {{{Q'}_i}\left( 1 \right) = \frac{5}{{16}}{\mathit{\boldsymbol{q}}_{i + 1}}\left( {\ln \left( {\mathit{\boldsymbol{q}}_i^{ - 1}{\mathit{\boldsymbol{q}}_{i + 1}}} \right) + \ln \left( {\mathit{\boldsymbol{q}}_{i + 1}^{ - 1}{\mathit{\boldsymbol{q}}_{i + 2}}} \right)} \right)} \end{array} $ |
因此
$ {{Q'}_{i + 1}}\left( 0 \right) = {{Q'}_i}\left( 1 \right) $ | (9) |
求
$ \begin{array}{*{20}{c}} {{{Q''}_i}\left( t \right) = {\mathit{\boldsymbol{q}}_{i - 1}}{{\left[{{{\left( {\mathit{\boldsymbol{q}}_{i-1}^{-1}{\mathit{\boldsymbol{q}}_i}} \right)}^{{{\tilde B}_1}\left( t \right)}}} \right]}^{\prime \prime }}{{\left( {\mathit{\boldsymbol{q}}_i^{ - 1}{\mathit{\boldsymbol{q}}_{i + 1}}} \right)}^{{{\tilde B}_2}\left( t \right)}}}\\ {{{\left( {\mathit{\boldsymbol{q}}_{i + 1}^{ - 1}{\mathit{\boldsymbol{q}}_{i + 2}}} \right)}^{{{\tilde B}_3}\left( t \right)}} + {\mathit{\boldsymbol{q}}_{i - 1}}{{\left( {\mathit{\boldsymbol{q}}_{i - 1}^{ - 1}{\mathit{\boldsymbol{q}}_i}} \right)}^{{{\tilde B}_1}\left( t \right)}}{{\left[{{{\left( {\mathit{\boldsymbol{q}}_i^{-1}{\mathit{\boldsymbol{q}}_{i + 1}}} \right)}^{{{\tilde B}_2}\left( t \right)}}} \right]}^{\prime \prime }}}\\ {{{\left( {\mathit{\boldsymbol{q}}_{i + 1}^{ - 1}{\mathit{\boldsymbol{q}}_{i + 2}}} \right)}^{{{\tilde B}_3}\left( t \right)}} + {\mathit{\boldsymbol{q}}_{i - 1}}{{\left( {\mathit{\boldsymbol{q}}_{i - 1}^{ - 1}{\mathit{\boldsymbol{q}}_i}} \right)}^{{{\tilde B}_1}\left( t \right)}}{{\left( {\mathit{\boldsymbol{q}}_i^{ - 1}{\mathit{\boldsymbol{q}}_{i + 1}}} \right)}^{{{\tilde B}_2}\left( t \right)}}}\\ {{{\left[{{{\left( {\mathit{\boldsymbol{q}}_{i + 1}^{-1}{\mathit{\boldsymbol{q}}_{i + 2}}} \right)}^{{{\tilde B}_3}\left( t \right)}}} \right]}^{\prime \prime }} + 2{\mathit{\boldsymbol{q}}_{i - 1}}{{\left[{{{\left( {\mathit{\boldsymbol{q}}_{i-1}^{-1}{\mathit{\boldsymbol{q}}_i}} \right)}^{{{\tilde B}_1}\left( t \right)}}} \right]}^\prime }}\\ {{{\left[{{{\left( {\mathit{\boldsymbol{q}}_i^{-1}{\mathit{\boldsymbol{q}}_{i + 1}}} \right)}^{{{\tilde B}_2}\left( t \right)}}} \right]}^\prime }{{\left( {\mathit{\boldsymbol{q}}_{i + 1}^{ - 1}{\mathit{\boldsymbol{q}}_{i + 2}}} \right)}^{{{\tilde B}_3}\left( t \right)}} + }\\ {2{\mathit{\boldsymbol{q}}_{i - 1}}{{\left[{{{\left( {\mathit{\boldsymbol{q}}_{i-1}^{-1}{\mathit{\boldsymbol{q}}_i}} \right)}^{{{\tilde B}_1}\left( t \right)}}} \right]}^\prime }{{\left( {\mathit{\boldsymbol{q}}_i^{ - 1}{\mathit{\boldsymbol{q}}_{i + 1}}} \right)}^{{{\tilde B}_2}\left( t \right)}}}\\ {{{\left[{{{\left( {\mathit{\boldsymbol{q}}_{i + 1}^{-1}{\mathit{\boldsymbol{q}}_{i + 2}}} \right)}^{{{\tilde B}_3}\left( t \right)}}} \right]}^\prime } + 2{\mathit{\boldsymbol{q}}_{i - 1}}{{\left( {\mathit{\boldsymbol{q}}_{i - 1}^{ - 1}{\mathit{\boldsymbol{q}}_i}} \right)}^{{{\tilde B}_1}\left( t \right)}}}\\ {{{\left[{{{\left( {\mathit{\boldsymbol{q}}_i^{-1}{\mathit{\boldsymbol{q}}_{i + 1}}} \right)}^{{{\tilde B}_2}\left( t \right)}}} \right]}^\prime }{{\left[{{{\left( {\mathit{\boldsymbol{q}}_{i + 1}^{-1}{\mathit{\boldsymbol{q}}_{i + 2}}} \right)}^{{{\tilde B}_3}\left( t \right)}}} \right]}^\prime }, } \end{array} $ |
式中
$ \begin{array}{*{20}{c}} {{{\left[{{{\left( {\mathit{\boldsymbol{q}}_{i-1}^{-1}{\mathit{\boldsymbol{q}}_i}} \right)}^{{{\tilde B}_1}\left( t \right)}}} \right]}^{\prime \prime }} = {{\left( {\mathit{\boldsymbol{q}}_{i - 1}^{ - 1}{\mathit{\boldsymbol{q}}_i}} \right)}^{{{\tilde B}_1}\left( t \right)}}{{\left( {{{\tilde B'}_1}\left( t \right)} \right)}^2}}\\ {{{\left[{\ln \left( {\mathit{\boldsymbol{q}}_{i-1}^{-1}{\mathit{\boldsymbol{q}}_i}} \right)} \right]}^2} + {{\left( {\mathit{\boldsymbol{q}}_{i - 1}^{ - 1}{\mathit{\boldsymbol{q}}_i}} \right)}^{{{\tilde B}_1}\left( t \right)}}{{\tilde B''}_1}\left( t \right)\ln \left( {\mathit{\boldsymbol{q}}_{i - 1}^{ - 1}{\mathit{\boldsymbol{q}}_i}} \right), }\\ {{{\left[{{{\left( {\mathit{\boldsymbol{q}}_i^{-1}{\mathit{\boldsymbol{q}}_{i + 1}}} \right)}^{{{\tilde B}_2}\left( t \right)}}} \right]}^{\prime \prime }} = {{\left( {\mathit{\boldsymbol{q}}_i^{ - 1}{\mathit{\boldsymbol{q}}_{i + 1}}} \right)}^{{{\tilde B}_2}\left( t \right)}}{{\left( {{{\tilde B'}_2}\left( t \right)} \right)}^2}}\\ {{{\left[{\ln \left( {\mathit{\boldsymbol{q}}_i^{-1}{\mathit{\boldsymbol{q}}_{i + 1}}} \right)} \right]}^2} + {{\left( {\mathit{\boldsymbol{q}}_i^{ - 1}{\mathit{\boldsymbol{q}}_{i + 1}}} \right)}^{{{\tilde B}_2}\left( t \right)}}{{\tilde B''}_2}\left( t \right)\ln \left( {\mathit{\boldsymbol{q}}_i^{ - 1}{\mathit{\boldsymbol{q}}_{i + 1}}} \right), }\\ {{{\left[{{{\left( {\mathit{\boldsymbol{q}}_{i + 1}^{-1}{\mathit{\boldsymbol{q}}_{i + 2}}} \right)}^{{{\tilde B}_3}\left( t \right)}}} \right]}^{\prime \prime }} = {{\left( {\mathit{\boldsymbol{q}}_{i + 1}^{ - 1}{\mathit{\boldsymbol{q}}_{i + 2}}} \right)}^{{{\tilde B}_3}\left( t \right)}}}\\ {{{\left( {{{\tilde B'}_3}\left( t \right)} \right)}^2}{{\left[{\ln \left( {\mathit{\boldsymbol{q}}_{i + 1}^{-1}{\mathit{\boldsymbol{q}}_{i + 2}}} \right)} \right]}^2} + }\\ {{{\left( {\mathit{\boldsymbol{q}}_{i + 1}^{ - 1}{\mathit{\boldsymbol{q}}_{i + 2}}} \right)}^{{{\tilde B}_3}\left( t \right)}}{{\tilde B''}_3}\left( t \right)\ln \left( {\mathit{\boldsymbol{q}}_{i + 1}^{ - 1}{\mathit{\boldsymbol{q}}_{i + 2}}} \right), } \end{array} $ |
有
$ \begin{array}{l} {{Q''}_i}\left( 0 \right) = {\left( {\frac{5}{{16}}} \right)^2}{\mathit{\boldsymbol{q}}_i}\left[{{{\left( {\ln \left( {\mathit{\boldsymbol{q}}_{i-1}^{-1}{\mathit{\boldsymbol{q}}_i}} \right)} \right)}^2} + } \right.\\ \left. {2\ln \left( {\mathit{\boldsymbol{q}}_{i-1}^{ - 1}{\mathit{\boldsymbol{q}}_i}} \right)\ln \left( {\mathit{\boldsymbol{q}}_i^{ - 1}{\mathit{\boldsymbol{q}}_{i + 1}}} \right) + {{\left( {\ln \left( {\mathit{\boldsymbol{q}}_i^{ - 1}{\mathit{\boldsymbol{q}}_{i + 1}}} \right)} \right)}^2}} \right] + \\ \frac{5}{2}{\mathit{\boldsymbol{q}}_i}\left[{\ln \left( {\mathit{\boldsymbol{q}}_i^{-1}{\mathit{\boldsymbol{q}}_{i + 1}}} \right)-\ln \left( {\mathit{\boldsymbol{q}}_{i-1}^{ - 1}{\mathit{\boldsymbol{q}}_i}} \right)} \right], \end{array} $ |
$ \begin{array}{l} {{Q''}_i}\left( 1 \right) = {\left( {\frac{5}{{16}}} \right)^2}{\mathit{\boldsymbol{q}}_{i + 1}}\left[{{{\left( {\ln \left( {\mathit{\boldsymbol{q}}_i^{-1}{\mathit{\boldsymbol{q}}_{i + 1}}} \right)} \right)}^2} + } \right.\\ \left. {2\ln \left( {\mathit{\boldsymbol{q}}_i^{-1}{\mathit{\boldsymbol{q}}_{i + 1}}} \right)\ln \left( {\mathit{\boldsymbol{q}}_{i + 1}^{-1}{\mathit{\boldsymbol{q}}_{i + 2}}} \right) + {{\left( {\ln \left( {\mathit{\boldsymbol{q}}_{i + 1}^{ - 1}{\mathit{\boldsymbol{q}}_{i + 2}}} \right)} \right)}^2}} \right] + \\ \frac{5}{2}{\mathit{\boldsymbol{q}}_{i + 1}}\left[{\ln \left( {\mathit{\boldsymbol{q}}_{i + 1}^{-1}{\mathit{\boldsymbol{q}}_{i + 2}}} \right)-\ln \left( {\mathit{\boldsymbol{q}}_i^{-1}{\mathit{\boldsymbol{q}}_{i + 1}}} \right)} \right]。\end{array} $ |
因此
$ {{Q''}_{i + 1}}\left( 0 \right) = {{Q''}_i}\left( 1 \right) $ | (10) |
类似地,求出
$ {{Q'''}_{i + 1}}\left( 0 \right) = {{Q'''}_i}\left( 1 \right) $ | (11) |
为书写简便,曲线
综合式(8)—式(11)可知
证毕。
3 实验
在这部分,我们提供3D关键帧插值动画实例和对比实验来说明本文提出的单位四元数朝向曲线构造方法的可行性和有效性。
图 3中红色樱桃是随机给定的关键帧,绿色樱桃是由3种不同方法产生的
正如表 1中所示,和Nielson[7]的方法比较,本文提出的方法不需要迭代求解非线性方程组获得曲线的控制顶点,从而节省了计算时间,提高了工作效率;与Su等人[8]的方法比较,虽然两者均不需要迭代求解,但是由于本文方法没有使用三角函数,使得计算时间更短;而且,本文方法产生的朝向曲线获得了比前两种方法更高一阶的连续性。
表 1
关键帧动画朝向曲线的不同生成方法比较
Table 1
The comparison of different methods for generating keyframe animation orientation curves
4 结论
刚体运动动画通常有两个以上的关键帧需要连接,为了获得光滑的方向插值曲线,Shoemake[1],Schlag[2],Nielson[3-4, 7],Kim[5-6, 10],Wang[9],Ramamoorthi[11],Buss[12],Lee[13],Su[8],Xing[14]等均给出了四元数样条曲线的不同构造方法。本文提出一类基于5次多项式插值样条的单位四元数曲线构造方法,并讨论了它的插值性和连续性。与Nielson[7]的单位四元数均匀B样条曲线构造方法相比,所提的构造方法不需要迭代求解非线性方程组获得控制顶点就能插值给定的数据点,提高了动画设计效率。与Su等人[8]构造的
尽管本文方法具有自动精确插值、保证
参考文献
-
[1] Shoemake K. Animating rotation with quaternion curves[J]. ACM SIGGRAPH Computer Graphics, 1985, 19(3): 245–254. [DOI:10.1145/325165.325242]
-
[2] Schlag J. Using geometric constructions to interpolate orientation with quaternions[M]//Arvo J. Graphics Games Ⅱ. New York, NY, USA: Academic Press, 1991: 377-380. [DOI:10.1016/B978-0-08-050754-5.50081-5]
-
[3] Nielson G M, Heiland R W. Animated rotations using quaternions and splines on a 4D sphere[J]. Programming and Computer Software, 1992, 18(4): 145–154.
-
[4] Nielson G M. Smooth interpolation of orientations[M]//Thalmann N M, Thalmann D. Models and Techniques in Computer Animation. Tokyo: Springer-Verlag, 1993: 75-93. [DOI:10.1007/978-4-431-66911-1_8]
-
[5] Kim M J, Kim M S, Shin S Y. A general construction scheme for unit quaternion curves with simple high order derivatives[C]//Proceedings of the 22nd Annual Conference on Computer Graphics and Interactive Techniques. New York, USA: ACM Press, 1995: 369-376. [DOI:10.1145/218380.218486]
-
[6] Kim M J, Kim M S, Shin S Y. A C2-continuous B-spline quaternion curve interpolating a given sequence of solid orientations[C]//Proceedings of IEEE Computer Animation. Geneva, Switzerland: IEEE, 1995: 72-81. [DOI:10.1109/CA.1995.393545]
-
[7] Nielson G M. v-quaternion splines for the smooth interpolation of orientations[J]. IEEE Transactions on Visualization and Computer Graphics, 2004, 10(2): 224–229. [DOI:10.1109/TVCG.2004.1260774]
-
[8] Su B Y, Zhang J, Wang G J. The solid orientations interpolation in quaternion space using a class of blending interpolation spline[J]. International Journal of Advancements in Computing Technology, 2013, 5(6): 335–341. [DOI:10.4156/ijact]
-
[9] Wang W P, Joe B. Orientation interpolation in quaternion space using spherical biarcs[C]//Proceedings of Graphics Interface. Toronto: Canadian Human Computer Communications Society, 1993: 24-32.
-
[10] Kim M S, Nam K W. Interpolating solid orientations with circular blending quaternion curves[J]. Computer-Aided Design, 1995, 27(5): 385–398. [DOI:10.1016/0010-4485(95)96802-S]
-
[11] Ramamoorthi R, Barr A H. Fast construction of accurate quaternion splines[C]//Proceedings of the 24th Annual Conference on Computer Graphics and Interactive Techniques. New York, NY, USA: ACM Press/Addison-Wesley Publishing Co., 1997: 287-292. [DOI:10.1145/258734.258870]
-
[12] Buss S R, Fillmore J P. Spherical averages and applications to spherical splines and interpolation[J]. ACM Transactions on Graphics, 2001, 20(2): 95–126. [DOI:10.1145/502122.502124]
-
[13] Lee J, Shin S Y. General construction of time-domain filters for orientation data[J]. IEEE Transactions on Visualization and Computer Graphics, 2002, 8(2): 119–128. [DOI:10.1109/2945.998665]
-
[14] Xing Y, Xu R Z, Tan J Q, et al. A class of generalized B-spline quaternion curves[J]. Applied Mathematics and Computation, 2015, 271: 288–300. [DOI:10.1016/j.amc.2015.09.025]
-
[15] Xiong J, Guo Q W, Zhu G Q. May be whole or partial control of the
${C^3}$ -and C4-continuous interpolation curves[J]. Journal on Numerical Methods and Computer Applications, 2011, 32(3): 165–173. [熊建, 郭清伟, 朱功勤. 可整体或局部调控的${C^3}$ , C4连续的插值曲线[J]. 数值计算与计算机应用, 2011, 32(3): 165–173. ]