数值计算库Eigen:几何-空间变换
发布网友
发布时间:2024-10-03 10:40
我来回答
共1个回答
热心网友
时间:2024-12-01 13:11
本节主要介绍Eigen几何模块,涵盖了二维和三维空间中的旋转、投影及仿射变换。
Eigen提供了两种几何变换类型:Affine3f和Affine3d。因为Eigen使用列主存贮顺序,可直接通过Transform::data()方法将变换矩阵传递到OpenGL。
可通过抽象的变换构建Transform对象,例如:
构建Transform对象时,不能直接使用以下方式:
因为C++不允许Transform隐式转换为AngleAxis构造器。变换类型包括:
旋转矩阵适合变换多个向量,而四元数Quaternion因其紧凑、高效及稳定性成为首选表示。Rotation2D和AngleAxis是创建旋转对象的主要方式。
这些类简化了线性(Matrix)和仿射变换(Transform)。与效率低下的AngleAxis不同,它们被设计为编写处理任何类型转换的通用高效算法。
任何转换类型均可相互转换,或转换为更通用类型。示例如下:
提供了跨转换类型的通用API,允许编写处理任何类型变换表示的通用算法。例如:
一般的仿射变换用(Dim+1)^2矩阵表示。Eigen中,所有点都视为原点的位移向量(p≡p−0),因此实数点与向量在应用变换时有所区别。
除了串联基本变换外,Transform类还提供过程API进行创建和更新:
任意多个转换均可连接到一个表达式中,如以下两个示例所示:
Euler角度便于创建旋转对象,但由于有24种不同的约定,使用起来相对混乱。以下示例展示了如何根据2-1-2约定创建旋转矩阵。
本节内容主要围绕Eigen几何模块中几何变换的应用,从二维到三维,从旋转到仿射变换,提供了多种变换类型及API,旨在简化空间变换任务。