当前位置: 首页> 娱乐> 明星 > 数字营销师证书_网页升级访问永久你懂的_百度广告联盟下载_集客营销软件

数字营销师证书_网页升级访问永久你懂的_百度广告联盟下载_集客营销软件

时间:2025/8/13 7:20:59来源:https://blog.csdn.net/byxdaz/article/details/147542253 浏览次数:0次
数字营销师证书_网页升级访问永久你懂的_百度广告联盟下载_集客营销软件

1. Transform 类:仿射/射影变换

模板参数

cpp

Transform<Scalar, Dim, Mode, Options>
  • Scalar:数据类型(如 floatdouble)。

  • Dim:维度(2 或 3)。

  • Mode:变换类型:

    • Affine(默认):仿射变换(平移+旋转+缩放)。

    • AffineCompact:无缩放项的仿射变换。

    • Projective:射影变换(含透视效果)。

  • Options:存储顺序(ColMajor 或 RowMajor)。

核心属性与方法
方法/属性参数说明返回值/功能示例
matrix()返回底层 4x4 变换矩阵Matrix4f m = t.matrix();
translate(Vector3f)平移向量应用平移(修改自身)t.translate(Vector3f(1, 0, 0));
rotate(Quaternionf)四元数或旋转矩阵应用旋转t.rotate(AngleAxisf(M_PI/2, Vector3f::UnitZ()));
scale(Scalar) 或 scale(Vector3f)统一缩放因子或各轴独立缩放应用缩放t.scale(2.0);
prescale()prerotate()pretranslate()类似上述方法,但右乘(先执行新变换)链式变换t.pretranslate(Vector3f(0, 1, 0));
inverse()返回逆变换Transform3f inv_t = t.inverse();
linear()返回线性部分(旋转+缩放,3x3矩阵)Matrix3f R = t.linear();
translation()返回平移部分(向量)Vector3f pos = t.translation();
初始化方式
方法示例说明
单位变换Transform3f t = Transform3f::Identity();初始化为单位变换
从旋转矩阵构造t.linear() = AngleAxisf(θ, axis).toRotationMatrix();设置旋转部分

2. Quaternion 类:三维旋转

模板参数

cpp

Quaternion<Scalar, Options>
  • Scalar:数据类型(如 floatdouble)。

  • Options:存储顺序(AutoAlign 或 DontAlign)。

核心属性与方法
方法/属性参数说明返回值/功能示例
w()x()y()z()访问四元数分量(实部 w,虚部 x,y,zfloat qw = q.w();
coeffs()返回向量格式 [x, y, z, w]Vector4f coeff = q.coeffs();
normalize()归一化四元数(修改自身)q.normalize();
conjugate()返回共轭四元数Quaternionf q_conj = q.conjugate();
toRotationMatrix()转换为 3x3 旋转矩阵Matrix3f R = q.toRotationMatrix();
AngleAxis(angle, axis)angle:弧度,axis:旋转轴(需归一化)从轴角构造四元数Quaternionf q = AngleAxisf(M_PI/2, Vector3f::UnitZ());
slerp(Scalar t, Quaternion other)t:插值因子(0~1),other:目标四元数球面线性插值Quaternionf q_interp = q1.slerp(0.5, q2);
初始化方式
方法示例说明
直接构造Quaternionf q(w, x, y, z);注意参数顺序(w在前)
从旋转矩阵构造Quaternionf q(rotation_matrix);需矩阵正交

3. 其他几何类

(1) AngleAxis(轴角表示)
方法/属性参数说明示例
angle()返回旋转角度(弧度)float θ = aa.angle();
axis()返回旋转轴(需归一化)Vector3f axis = aa.axis();
toRotationMatrix()转换为 3x3 旋转矩阵Matrix3f R = aa.toRotationMatrix();
(2) Rotation2D(二维旋转)
方法参数说明示例
angle()返回旋转角度(弧度)Rotation2Df rot(M_PI/4);
toRotationMatrix()转换为 2x2 旋转矩阵Matrix2f R = rot.toRotationMatrix();

4. 代码示例

组合变换(平移+旋转+缩放)

cpp

#include <Eigen/Geometry>
using namespace Eigen;// 初始化变换
Transform<float, 3, Affine> t = Transform<float, 3, Affine>::Identity();
t.translate(Vector3f(1, 2, 3));                      // 平移
t.rotate(Quaternionf(AngleAxisf(M_PI/2, Vector3f::UnitX()))); // 绕 X 轴旋转 90°
t.scale(0.5);                                        // 缩放// 应用变换到点
Vector3f p(0, 1, 0);
Vector3f p_transformed = t * p;  // 结果: (1, 2.5, 3)
四元数插值

cpp

Quaternionf q1 = Quaternionf::Identity();
Quaternionf q2(AngleAxisf(M_PI/2, Vector3f::UnitZ()));
Quaternionf q_mid = q1.slerp(0.5, q2);  // 中间旋转

5. 关键注意事项

  1. 变换顺序:Eigen 默认左乘(即 t.rotate() 是相对于局部坐标系)。

    • 使用 prerotate()/pretranslate() 可切换为右乘(相对于世界坐标系)。

  2. 性能优化

    • 对于纯旋转,直接使用 Quaternion 或 AngleAxis 比 Transform 更高效。

    • 频繁变换组合时,优先复用 Transform 对象。

  3. 归一化:四元数和旋转轴需手动归一化(normalize())。

6. 几何类对比

类名最佳用途内存占用计算效率
Transform复合变换(平移+旋转+缩放)16 floats (3D)中等
Quaternion纯旋转/插值4 floats
AngleAxis轴角表示旋转4 floats (3+1)低(需转换)
Rotation2D二维旋转1 float

掌握这些类后,可高效处理 2D/3D 空间中的几何变换!更多细节见 Eigen Geometry 文档。

关键字:数字营销师证书_网页升级访问永久你懂的_百度广告联盟下载_集客营销软件

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: