![]() |
OpenCV
开源计算机视觉
|
#include <opencv2/core/dualquaternion.hpp>
公有成员函数 | |
DualQuat () | |
DualQuat (const _Tp w, const _Tp x, const _Tp y, const _Tp z, const _Tp w_, const _Tp x_, const _Tp y_, const _Tp z_) | |
由八个相同类型的数字创建。 | |
DualQuat (const Vec< _Tp, 8 > &q) | |
由双精度或浮点向量创建。 | |
DualQuat< _Tp > | conjugate () const |
返回对偶四元数的共轭。 | |
_Tp | dot (DualQuat< _Tp > p) const |
返回两个对偶四元数的点积。 | |
DualQuat< _Tp > | exp () const |
返回指数函数的值。 | |
Quat< _Tp > | getDualPart () const |
返回一个表示对偶四元数对偶部分的四元数。createFromQuat() 中定义了对偶部分。 | |
Quat< _Tp > | getRealPart () const |
返回一个表示对偶四元数实数部分的四元数。createFromQuat() 中定义了实数部分。 | |
Quat< _Tp > | getRotation (QuatAssumeType assumeUnit=QUAT_ASSUME_NOT_UNIT) const |
返回四元数形式的旋转。 | |
Vec< _Tp, 3 > | getTranslation (QuatAssumeType assumeUnit=QUAT_ASSUME_NOT_UNIT) const |
返回平移向量。在这个对偶四元数 σ 中的旋转 r 在平移 t 之前应用。对偶四元数 σ 定义为 | |
DualQuat< _Tp > | inv (QuatAssumeType assumeUnit=QUAT_ASSUME_NOT_UNIT) const |
如果 σ = p + εq 是一个对偶四元数,p 不为零,则逆对偶四元数为 | |
DualQuat< _Tp > | log (QuatAssumeType assumeUnit=QUAT_ASSUME_NOT_UNIT) const |
返回对数函数的值。 | |
DualQuat< _Tp > | norm () const |
返回对偶四元数 σ = p + εq 的范数 ||σ||。 | |
DualQuat< _Tp > | normalize () const |
返回一个标准化的对偶四元数。对偶四元数可以表示为 | |
DualQuat< _Tp > | operator* (const DualQuat< _Tp > &) const |
两个对偶四元数 q 和 p 的乘法运算符。将运算符两侧的值相乘。 | |
DualQuat< _Tp > | operator*= (const _Tp s) |
四元数和标量的乘法赋值运算符。它将右操作数与左操作数相乘,并将结果赋值给左操作数。 | |
DualQuat< _Tp > & | operator*= (const DualQuat< _Tp > &) |
两个四元数的乘法赋值运算符。它将右操作数与左操作数相乘,并将结果赋值给左操作数。 | |
DualQuat< _Tp > | operator+ (const DualQuat< _Tp > &) const |
两个对偶四元数 p 和 q 的加法运算符。它返回一个新的对偶四元数,其每个值都是 pi 和 qi 的和。 | |
DualQuat< _Tp > & | operator+= (const DualQuat< _Tp > &) |
两个对偶四元数 p 和 q 的加法赋值运算符。它将右操作数添加到左操作数,并将结果赋值给左操作数。 | |
DualQuat< _Tp > | operator- () const |
返回相反的对偶四元数 -p,满足 p + (-p) = 0。 | |
DualQuat< _Tp > | operator- (const DualQuat< _Tp > &) const |
两个对偶四元数 p 和 q 的减法运算符。它返回一个新的对偶四元数,其每个值都是 pi 和 -qi 的和。 | |
DualQuat< _Tp > & | operator-= (const DualQuat< _Tp > &) |
两个对偶四元数 p 和 q 的减法赋值运算符。它从左操作数中减去右操作数,并将结果赋值给左操作数。 | |
DualQuat< _Tp > | operator/ (const _Tp s) const |
对偶四元数和标量的除法运算符。它将左操作数除以右操作数,并将结果赋值给左操作数。 | |
DualQuat< _Tp > | operator/ (const DualQuat< _Tp > &) const |
两个对偶四元数 p 和 q 的除法运算符。将左操作数除以右操作数。 | |
Quat< _Tp > & | operator/= (const _Tp s) |
对偶四元数和标量的除法赋值运算符。它将左操作数除以右操作数,并将结果赋值给左操作数。 | |
DualQuat< _Tp > & | operator/= (const DualQuat< _Tp > &) |
两个对偶四元数 p 和 q 的除法赋值运算符;它将左操作数除以右操作数并将结果赋值给左操作数。 | |
bool | operator== (const DualQuat< _Tp > &) const |
如果两个对偶四元数 p 和 q 近似相等,则返回 true,即当每个 | |
DualQuat< _Tp > | power (const _Tp t, QuatAssumeType assumeUnit=QUAT_ASSUME_NOT_UNIT) const |
返回 | |
DualQuat< _Tp > | power (const DualQuat< _Tp > &q, QuatAssumeType assumeUnit=QUAT_ASSUME_NOT_UNIT) const |
返回 | |
Affine3< _Tp > | toAffine3 (QuatAssumeType assumeUnit=QUAT_ASSUME_NOT_UNIT) const |
将此对偶四元数转换为 Affine3 的实例。 | |
Matx< _Tp, 4, 4 > | toMat (QuatAssumeType assumeUnit=QUAT_ASSUME_NOT_UNIT) const |
将此对偶四元数转换为矩阵形式的仿射变换矩阵,参见 createFromMat()。 | |
Vec< _Tp, 8 > | toVec () const |
将此对偶四元数转换为向量。 | |
静态公共成员函数 | |
static DualQuat< _Tp > | createFromAffine3 (const Affine3< _Tp > &R) |
从仿射矩阵创建对偶四元数。仿射矩阵的定义可以参考 createFromMat() | |
static DualQuat< _Tp > | createFromAngleAxisTrans (const _Tp angle, const Vec< _Tp, 3 > &axis, const Vec< _Tp, 3 > &translation) |
从旋转角 | |
static DualQuat< _Tp > | createFromMat (InputArray _R) |
将此对偶四元数转换为仿射变换矩阵 | |
static DualQuat< _Tp > | createFromPitch (const _Tp angle, const _Tp d, const Vec< _Tp, 3 > &axis, const Vec< _Tp, 3 > &moment) |
对偶四元数是形式为的向量。 | |
static DualQuat< _Tp > | createFromQuat (const Quat< _Tp > &realPart, const Quat< _Tp > &dualPart) |
从两个相同类型的四元数 p 和 q 创建对偶四元数。对偶四元数 | |
static DualQuat< _Tp > | dqblend (const DualQuat< _Tp > &q1, const DualQuat< _Tp > &q2, const _Tp t, QuatAssumeType assumeUnit=QUAT_ASSUME_NOT_UNIT) |
对偶四元数线性混合 (DQB) 方法用于计算对偶四元数 | |
template<int cn> | |
static DualQuat< _Tp > | gdqblend (const Vec< DualQuat< _Tp >, cn > &dualquat, InputArray weights, QuatAssumeType assumeUnit=QUAT_ASSUME_NOT_UNIT) |
广义对偶四元数线性混合适用于两个以上的刚体变换。如果这些变换表示为具有凸权重 | |
static DualQuat< _Tp > | gdqblend (InputArray dualquat, InputArray weights, QuatAssumeType assumeUnit=QUAT_ASSUME_NOT_UNIT) |
广义对偶四元数线性混合适用于两个以上的刚体变换。如果这些变换表示为具有凸权重 | |
static DualQuat< _Tp > | sclerp (const DualQuat< _Tp > &q1, const DualQuat< _Tp > &q2, const _Tp t, bool directChange=true, QuatAssumeType assumeUnit=QUAT_ASSUME_NOT_UNIT) |
螺旋线性插值 (ScLERP) 是对偶四元数球面线性插值的扩展。如果 | |
公共属性 | |
_Tp | w |
_Tp | w_ |
_Tp | x |
_Tp | x_ |
_Tp | y |
_Tp | y_ |
_Tp | z |
_Tp | z_ |
静态公共属性 | |
静态 constexpr _Tp | CV_DUAL_QUAT_EPS = (_Tp)1.e-6 |
友元 | |
template<typename T > | |
DualQuat< T > | conjugate (const DualQuat< T > &dq) |
返回对偶四元数的共轭。 | |
template<typename T > | |
DualQuat< T > | cv::operator* (const DualQuat< T > &, const T s) |
双四元数与标量的乘法运算符。它将右操作数与左操作数相乘,并将结果赋值给左操作数。 | |
template<typename T > | |
DualQuat< T > | cv::operator* (const T s, const DualQuat< T > &) |
标量与双四元数的乘法运算符。它将右操作数与左操作数相乘,并将结果赋值给左操作数。 | |
template<typename T > | |
DualQuat< T > | cv::operator+ (const DualQuat< T > &, const T s) |
双四元数与标量的加法运算符。将右操作数加到左操作数。 | |
template<typename T > | |
DualQuat< T > | cv::operator+ (const T s, const DualQuat< T > &) |
标量与双四元数的加法运算符。将右操作数加到左操作数。 | |
template<typename T > | |
DualQuat< T > | cv::operator- (const DualQuat< T > &, const T s) |
双四元数与标量的减法运算符。从左操作数减去右操作数。 | |
template<typename T > | |
DualQuat< T > | cv::operator- (const T s, const DualQuat< T > &) |
标量与双四元数的减法运算符。从右操作数减去左操作数。 | |
template<typename S > | |
std::ostream & | cv::operator<< (std::ostream &, const DualQuat< S > &) |
template<typename T > | |
DualQuat< T > | exp (const DualQuat< T > &dq) |
返回指数函数的值。 | |
template<typename T > | |
DualQuat< T > | inv (const DualQuat< T > &dq, QuatAssumeType assumeUnit) |
如果 σ = p + εq 是一个对偶四元数,p 不为零,则逆对偶四元数为 | |
template<typename T > | |
DualQuat< T > | log (const DualQuat< T > &dq, QuatAssumeType assumeUnit) |
返回对数函数的值。 | |
template<typename T > | |
DualQuat< T > | power (const DualQuat< T > &dq, const T t, QuatAssumeType assumeUnit) |
返回 | |
template<typename T > | |
DualQuat< T > | power (const DualQuat< T > &p, const DualQuat< T > &q, QuatAssumeType assumeUnit) |
返回 | |
双四元数用于同时描述旋转和平移,而普通四元数只能描述旋转。它可以用于最短路径姿态插值、局部姿态优化或体积变形。更多细节可以参考:
单位双四元数通常表示为:
其中
由两个四元数组成的通用双四元数通常表示为:
其中引入的双单位
或者,双四元数也可以解释为四个分量,它们都是双数
如果我们将
如果要创建双四元数,可以使用:
点
其中
普吕克坐标
其中
要提取Vec<double, 8>或Vec<float, 8>,请参见toVec();
要提取仿射变换矩阵,请参见toMat();
要提取Affine3实例,请参见toAffine3();
如果需要插值两个四元数
对于需要混合多个(超过两个)对偶四元数的情况,可以使用带有相应权重的广义线性对偶四元数混合,即 gdqblend()。
cv::DualQuat< _Tp >::DualQuat | ( | ) |
cv::DualQuat< _Tp >::DualQuat | ( | const _Tp | w, |
const _Tp | x, | ||
const _Tp | y, | ||
const _Tp | z, | ||
const _Tp | w_, | ||
const _Tp | x_, | ||
const _Tp | y_, | ||
const _Tp | z_ ) |
由八个相同类型的数字创建。
cv::DualQuat< _Tp >::DualQuat | ( | const Vec< _Tp, 8 > & | q | ) |
由双精度或浮点向量创建。
DualQuat< _Tp > cv::DualQuat< _Tp >::conjugate | ( | ) | const |
返回对偶四元数的共轭。
|
静态 |
从仿射矩阵创建对偶四元数。仿射矩阵的定义可以参考 createFromMat()
|
静态 |
从旋转角
角度 | 旋转角度。 |
轴 | 旋转轴。 |
平移 | 一个长度为3的向量。 |
将此对偶四元数转换为仿射变换矩阵
如果 A 是一个由 n 个待转换点组成的矩阵,则可以通过以下方式实现:
其中 A 的形式为
其中相同的下标表示相同的点。A 的大小应为
_R | 表示旋转和平移的 4x4 矩阵。 |
|
静态 |
对偶四元数是形式为的向量。
其中
在此表示中,
角度 | 旋转角度。 |
d | 沿旋转轴的平移。 |
轴 | 由四元数表示的旋转轴,其中 w = 0。 |
矩 | 线的矩,它应该与轴正交。 |
|
静态 |
从两个相同类型的四元数 p 和 q 创建对偶四元数。对偶四元数
其中 p 和 q 定义如下
p 和 q 分别是实部和对偶部。
实部 | 一个四元数,双四元数的实部。 |
对偶部 | 一个四元数,双四元数的对偶部。 |
返回两个对偶四元数的点积。
p | 另一个双四元数。 |
|
静态 |
对偶四元数线性混合 (DQB) 方法用于计算对偶四元数
其中
q1 | 表示输入变换的单位双四元数。 |
q2 | 表示输入变换的单位双四元数。 |
t | 参数 |
assumeUnit | 如果 QUAT_ASSUME_UNIT,则此双四元数假定为单位双四元数,此函数将节省一些计算。 |
DualQuat< _Tp > cv::DualQuat< _Tp >::exp | ( | ) | const |
返回指数函数的值。
|
静态 |
广义对偶四元数线性混合适用于两个以上的刚体变换。如果这些变换表示为具有凸权重
对偶四元数向量 | 对偶四元数向量 |
权重向量 | 权重向量,权重向量的尺寸应与对偶四元数向量相同,且权重应满足 |
assumeUnit | 如果 QUAT_ASSUME_UNIT,则这些对偶四元数假定为单位四元数,此函数将节省一些计算。 |
|
静态 |
广义对偶四元数线性混合适用于两个以上的刚体变换。如果这些变换表示为具有凸权重
对偶四元数向量 | 具有8个通道和1行或1列的对偶四元数。 |
权重向量 | 权重向量,权重向量的尺寸应与对偶四元数向量相同,且权重应满足 |
assumeUnit | 如果 QUAT_ASSUME_UNIT,则这些对偶四元数假定为单位四元数,此函数将节省一些计算。 |
Quat< _Tp > cv::DualQuat< _Tp >::getDualPart | ( | ) | const |
返回一个表示对偶四元数对偶部分的四元数。createFromQuat() 中定义了对偶部分。
Quat< _Tp > cv::DualQuat< _Tp >::getRealPart | ( | ) | const |
返回一个表示对偶四元数实数部分的四元数。createFromQuat() 中定义了实数部分。
Quat< _Tp > cv::DualQuat< _Tp >::getRotation | ( | QuatAssumeType | assumeUnit = QUAT_ASSUME_NOT_UNIT | ) | const |
返回四元数形式的旋转。
Vec< _Tp, 3 > cv::DualQuat< _Tp >::getTranslation | ( | QuatAssumeType | assumeUnit = QUAT_ASSUME_NOT_UNIT | ) | const |
返回平移向量。在这个对偶四元数 σ 中的旋转 r 在平移 t 之前应用。对偶四元数 σ 定义为
因此,平移可以按如下方式获得
assumeUnit | 如果 QUAT_ASSUME_UNIT,则此双四元数假定为单位双四元数,此函数将节省一些计算。 |
DualQuat< _Tp > cv::DualQuat< _Tp >::inv | ( | QuatAssumeType | assumeUnit = QUAT_ASSUME_NOT_UNIT | ) | const |
如果 σ = p + εq 是一个对偶四元数,p 不为零,则逆对偶四元数为
或者等效地,
assumeUnit | 如果 QUAT_ASSUME_UNIT,则此双四元数假定为单位双四元数,此函数将节省一些计算。 |
DualQuat< _Tp > cv::DualQuat< _Tp >::log | ( | QuatAssumeType | assumeUnit = QUAT_ASSUME_NOT_UNIT | ) | const |
返回对数函数的值。
assumeUnit | 如果 QUAT_ASSUME_UNIT,则此双四元数假定为单位双四元数,此函数将节省一些计算。 |
DualQuat< _Tp > cv::DualQuat< _Tp >::norm | ( | ) | const |
返回对偶四元数 σ = p + εq 的范数 ||σ||。
一般来说,非单位对偶四元数的范数是一个对偶数。为方便起见,我们以对偶四元数的形式返回它,即
DualQuat< _Tp > cv::DualQuat< _Tp >::normalize | ( | ) | const |
返回一个标准化的对偶四元数。对偶四元数可以表示为
其中
其中
接下来,我们简单证明
正如预期的那样,实部是旋转,对偶部是纯四元数。
四元数和标量的乘法赋值运算符。它将右操作数与左操作数相乘,并将结果赋值给左操作数。
对偶四元数与标量相乘的规则
例如
DualQuat< _Tp > cv::DualQuat< _Tp >::operator- | ( | ) | const |
返回相反的对偶四元数 -p,满足 p + (-p) = 0。
例如
对偶四元数和标量的除法运算符。它将左操作数除以右操作数,并将结果赋值给左操作数。
对偶四元数除以标量的规则
例如
对偶四元数和标量的除法赋值运算符。它将左操作数除以右操作数,并将结果赋值给左操作数。
对偶四元数除以标量的规则
例如
bool cv::DualQuat< _Tp >::operator== | ( | 常量 DualQuat< _Tp > & | ) | const |
如果两个对偶四元数 p 和 q 近似相等,则返回 true,即当每个
DualQuat< _Tp > cv::DualQuat< _Tp >::power | ( | const _Tp | t, |
QuatAssumeType | assumeUnit = QUAT_ASSUME_NOT_UNIT ) const |
DualQuat< _Tp > cv::DualQuat< _Tp >::power | ( | 常量 DualQuat< _Tp > & | q, |
QuatAssumeType | assumeUnit = QUAT_ASSUME_NOT_UNIT ) const |
|
静态 |
螺旋线性插值 (ScLERP) 是对偶四元数球面线性插值的扩展。如果
q1 | 表示初始姿态的对偶四元数。 |
q2 | 表示最终姿态的对偶四元数。 |
t | 插值参数 |
directChange | 如果为真,则始终返回最短路径。 |
assumeUnit | 如果 QUAT_ASSUME_UNIT,则此双四元数假定为单位双四元数,此函数将节省一些计算。 |
例如
Affine3< _Tp > cv::DualQuat< _Tp >::toAffine3 | ( | QuatAssumeType | assumeUnit = QUAT_ASSUME_NOT_UNIT | ) | const |
将此对偶四元数转换为 Affine3 的实例。
Matx< _Tp, 4, 4 > cv::DualQuat< _Tp >::toMat | ( | QuatAssumeType | assumeUnit = QUAT_ASSUME_NOT_UNIT | ) | const |
将此对偶四元数转换为矩阵形式的仿射变换矩阵,参见 createFromMat()。
Vec< _Tp, 8 > cv::DualQuat< _Tp >::toVec | ( | ) | const |
将此对偶四元数转换为向量。
|
friend |
返回对偶四元数的共轭。
dq | 一个对偶四元数。 |
|
friend |
双四元数与标量的乘法运算符。它将右操作数与左操作数相乘,并将结果赋值给左操作数。
对偶四元数与标量相乘的规则
例如
|
friend |
标量与双四元数的乘法运算符。它将右操作数与左操作数相乘,并将结果赋值给左操作数。
对偶四元数与标量相乘的规则
例如
|
friend |
双四元数与标量的加法运算符。将右操作数加到左操作数。
例如
|
friend |
标量与双四元数的加法运算符。将右操作数加到左操作数。
例如
|
friend |
双四元数与标量的减法运算符。从左操作数减去右操作数。
例如
|
friend |
标量与双四元数的减法运算符。从右操作数减去左操作数。
例如
|
friend |
返回指数函数的值。
dq | 一个对偶四元数。 |
|
friend |
如果 σ = p + εq 是一个对偶四元数,p 不为零,则逆对偶四元数为
或者等效地,
dq | 一个对偶四元数。 |
assumeUnit | 如果 QUAT_ASSUME_UNIT,则双四元数dq假定为单位双四元数,此函数将节省一些计算。 |
|
friend |
返回对数函数的值。
dq | 一个对偶四元数。 |
assumeUnit | 如果 QUAT_ASSUME_UNIT,则双四元数dq假定为单位双四元数,此函数将节省一些计算。 |
|
friend |
返回
dq | 一个对偶四元数。 |
t | 幂函数的指数。 |
assumeUnit | 如果 QUAT_ASSUME_UNIT,则双四元数dq假定为单位双四元数,此函数将节省一些计算。 |
|
friend |
返回
p | 一个对偶四元数。 |
q | 一个对偶四元数。 |
assumeUnit | 如果 QUAT_ASSUME_UNIT,则双四元数p假定为单位双四元数,此函数将节省一些计算。 |
|
staticconstexpr |
_Tp cv::DualQuat< _Tp >::w |
_Tp cv::DualQuat< _Tp >::w_ |
_Tp cv::DualQuat< _Tp >::x |
_Tp cv::DualQuat< _Tp >::x_ |
_Tp cv::DualQuat< _Tp >::y |
_Tp cv::DualQuat< _Tp >::y_ |
_Tp cv::DualQuat< _Tp >::z |
_Tp cv::DualQuat< _Tp >::z_ |