Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >eigen库的使用_sfml是什么库

eigen库的使用_sfml是什么库

作者头像
全栈程序员站长
发布于 2022-09-27 07:36:21
发布于 2022-09-27 07:36:21
75000
代码可运行
举报
运行总次数:0
代码可运行

Eigen是开源的C++线性代数库,常用在计算机图形学中。 有份英文的Eigen使用手册,简要整理一下

安装
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ cd ~
$ git clone https://github.com/eigenteam/eigen-git-mirror

Eigen所有的文件都是h文件,只需include即可使用, 但是要告诉编译器它在哪个位置。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ sudo ln -s /usr/local/include ~/eigen-git-mirror/Eigen
使用
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <Eigen/Core>

创建新矩阵的时候如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Matrix3f A;
Matrix4d B;

这里的命名有一个便利性,比如A的类型是Matrix3f,就表示A是3×3 float型矩阵, 同理B是4×4 double型矩阵。 但并不是所有组合都work的,比如Matrix5s就会报错(虽然想的是5×5 short);也不是必须是正方形的矩阵。 那如果想用5×5 short的maxtrix呢?或者是长和宽不同的矩阵呢?

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Matrix<short, 5, 5> M1;
Matrix<float, 20, 75> M2;

另外,Eigen还支持在编译的时候还不知道长和宽的矩阵,用X代替,如MatrixXf, MatrixXd。

矩阵的初始化
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// Initialize A
A << 1.0 f , 0.0 f , 0.0 f ,
	0.0 f , 1.0 f , 0.0 f ,
	0.0 f , 0.0 f , 1.0 f ;
	
// Initialize B by accessing individual elements
for i = 1:4 { 
   
	for j = 1:4 { 
   
		B (j , i ) = 0.0;
	}
}

上面第一种方式,会一行一行地向矩阵中填入数字,所有的数字都必须提供, 如果size不match的话会报错。

第二种方式,B矩阵,可以看到是一列一列填数字的,当然也可以换成一行一行填,不过Eigen的储存方式是列主导的,一列一列填效率会更高。

指定某元素的时候不像C++那样用方括号,A[i. j], 而是圆括号A(i, j)。

也有便利的方式初始化数值

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// Set each coefficient to a uniform random value in the range
[ -1 , 1]
A = Matrix3f :: Random () ;

// Set B to the identity matrix
B = Matrix4d :: Identity () ;

// Set all elements to zero
A = Matrix3f :: Zero () ;

// Set all elements to ones
A = Matrix3f :: Ones () ;

// Set all elements to a constant value
B = Matrix4d :: Constant (4.5) ;
矩阵运算

常用的矩阵运算来一波

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Matrix4f M1 = Matrix4f :: Random () ;
Matrix4f M2 = Matrix4f :: Constant (2.2) ;

// Addition
// The size and the coefficient - types of the matrices must match
cout << M1 + M2 << endl ;

// Matrix multiplication
// The inner dimensions and the coefficient - types must match
cout << M1 * M2 << endl ;

// Scalar multiplication , and subtraction
// What do you expect the output to be ?
cout << M2 - Matrix4f :: Ones () * 2.2 << endl ;

等号(==)和不等号(!=)也可用在矩阵的比较上,所有对应数字都相等矩阵才相等。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cout << ( M2 - Matrix4f :: Ones () * 2.2 == Matrix4f :: Zero () )
<< endl 

矩阵的转置和逆运算

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// Transposition
cout << M1 . transpose () << endl ;

// Inversion ( # include < Eigen / Dense > )
// Generates NaNs if the matrix is not invertible
cout << M1 . inverse () << endl ;

如果想进行矩阵的element-wise计算,可以把矩阵当作array来计算,通过调用array()方法

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// Square each element of the matrix
cout << M1 . array () . square () << endl ;

// Multiply two matrices element - wise
cout << M1 . array () * Matrix4f :: Identity () . array () << endl ;

// All relational operators can be applied element - wise
cout << M1 . array () <= M2 . array () << endl << endl ;
cout << M1 . array () > M2 . array () << endl ;

注意上面的方法不是in place的,就是说不是在原矩阵上运算的,它会返回一个新的矩阵,比如 M1.array().sqrt()运算后会返回一个新矩阵,而M1数值不变。

Vector和矩阵用法类似,参考Eigen使用手册

平移和旋转
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# include < Eigen / Core >
# include < Eigen / Geometry >
# include < iostream >
using namespace std ;
using namespace Eigen ;
int main () { 
   
	float arrVertices [] = { 
    -1.0 , -1.0 , -1.0 ,
							1.0 , -1.0 , -1.0 ,
							1.0 , 1.0 , -1.0 ,
							-1.0 , 1.0 , -1.0 ,
							-1.0 , -1.0 , 1.0 ,
							1.0 , -1.0 , 1.0 ,
							1.0 , 1.0 , 1.0 ,
							-1.0 , 1.0 , 1.0};
	MatrixXf mVertices = Map < Matrix < float , 3 , 8 > > ( arrVertices ) ;
	Transform < float , 3 , Affine > t = Transform < float , 3 , Affine >::
				Identity () ;
	t . scale ( 0.8 f ) ;
	t . rotate ( AngleAxisf (0.25 f * M_PI , Vector3f :: UnitX () ) ) ;
	t . translate ( Vector3f (1.5 , 10.2 , -5.1) ) ;
	cout << t * mVertices . colwise () . homogeneous () << endl ;
}

上面用C++数组初始化一个MatrixXf型的矩阵,包含了x,y,z坐标。通过Eigen的Map类来初始化矩阵。 t进行了scale, 旋转和平移变换。用矩阵表示的话,变换如下 U = TRSI,其中I表示单位矩阵。

rotation包含了旋转角度和旋转轴,旋转轴必须是归一化的单位向量;可以用AngleAxisf类把旋转角和旋转轴组合到一起。 Vector3f::UnitX(), Vector3f::UnitY, Vector3f::UnitZ() 分别表示x, y, z方向的单位向量。

更多的使用方法请参考

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/183727.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
SLAM初探:Eigen库简单使用
Eigen是一个高层次的C ++库,有效支持线性代数,矩阵和矢量运算,数值分析及其相关的算法。Eigen是一个开源库,从3.1.1版本开始遵从MPL2许可。
小白学视觉
2019/11/07
3K1
eigen库的优缺点_简单介绍一种你在家中使用过的工具
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/02
3270
SVD分解 Eigen库 opencv库[通俗易懂]
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/02
8090
Eigen库学习教程(全)
说明:本教程主要是对eigen官网文档做了一个简要的翻译,参考了eigen官网以及一些博主的技术贴,在此表示感谢。
全栈程序员站长
2022/11/02
5.4K0
Eigen库学习教程(全)
从零开始一起学习SLAM | 三维空间刚体的旋转
刚体,顾名思义,是指本身不会在运动过程中产生形变的物体,如相机的运动就是刚体运动,运动过程中同一个向量的长度和夹角都不会发生变化。刚体变换也称为欧式变换。
用户1150922
2019/05/26
1.5K0
一分钟详解PCL中点云配准技术
本文是对前两篇文章:点云配准(一 两两配准)以及3D点云(二 多福点云配准)的补充,希望可以在一定程度上帮助大家对点云配准理解地更为深刻。
计算机视觉
2020/12/11
2.3K0
一分钟详解PCL中点云配准技术
Games101--Assignment2
修改函数rasterize_triangle(const Triangle& t)。 该函数的内部工作流程如下:
Enterprise_
2020/08/02
8080
第4章代码-图形几何变换
目录 4.4 编程实例——三角形与矩形变换及动画 4.4.1 自定义矩阵变换实例——三角形变换 4.4.2 OpenGL几何变换实例——矩形变换 4.4.3 变换应用实例——正方形旋转动画 4.4
步行者08
2020/09/19
6940
Eigen库要点「建议收藏」
Map类用于通过C++中普通的连续指针或者数组 (raw C/C++ arrays)来构造Eigen里的Matrix类,这就好比Eigen里的Matrix类的数据和raw C++array 共享了一片地址,也就是引用。
全栈程序员站长
2022/11/02
1.4K0
Eigen库要点「建议收藏」
Ubuntu安装Eigen进行OpenCV矩阵变换
目录 一:安装Eigen (1)安装 方式一、直接命令安装 方式二、源码安装: (2)移动文件 二:使用Eigen——旋转矩阵转换欧拉角 三:其他用法示例 简单记录下~~ Eigen是一个基于C++模板的开源库,支持线性代数,矩阵和矢量运算,数值分析及其相关的算法。 官网:Eigen 一:安装Eigen (1)安装 方式一、直接命令安装 sudo apt-get install libeigen3-dev 方式二、源码安装: https://gitlab.com/libeigen/eigen/-
小锋学长生活大爆炸
2022/05/09
1.3K0
Ubuntu安装Eigen进行OpenCV矩阵变换
PCL点云变换与移除NaN
对点云的操作可以直接应用变换矩阵,即旋转,平移,尺度,3D的变换就是要使用4*4 的矩阵,例如:
点云PCL博主
2019/07/31
2.5K0
PCL点云变换与移除NaN
【3D篇】点云拼接
computeSurfaceNormals() has finished in 0 s
threeQing
2021/09/29
1.6K0
【3D篇】点云拼接
PCL点云配准(1)
在逆向工程,计算机视觉,文物数字化等领域中,由于点云的不完整,旋转错位,平移错位等,使得要得到的完整的点云就需要对局部点云进行配准,为了得到被测物体的完整数据模型,需要确定一个合适的坐标系,将从各个视角得到的点集合并到统一的坐标系下形成一个完整的点云,然后就可以方便进行可视化的操作,这就是点云数据的配准。点云的配准有手动配准依赖仪器的配准,和自动配准,点云的自动配准技术是通过一定的算法或者统计学规律利用计算机计算两块点云之间错位,从而达到两块点云自动配准的效果,其实质就是把不同的坐标系中测得到的数据点云进行坐标系的变换,以得到整体的数据模型,问题的关键是如何让得到坐标变换的参数R(旋转矩阵)和T(平移向量),使得两视角下测得的三维数据经坐标变换后的距离最小,,目前配准算法按照过程可以分为整体配准和局部配准,。PCL中有单独的配准模块,实现了配准相关的基础数据结构,和经典的配准算法如ICP。
点云PCL博主
2019/07/31
2.5K0
PCL点云配准(1)
eigen库使用_eigen3
找到自己需要的版本下载,我下载的是3.3.9,箭头指向的 zip。 解压缩得到文件eigen-3.3.9,放到自己想放置的路径下(后面会引用此处的路径)。
全栈程序员站长
2022/11/04
1.5K0
eigen库使用_eigen3
Eigen中四元数、欧拉角、旋转矩阵、旋转向量之间的转换
旋转向量 1,初始化旋转向量:旋转角为alpha,旋转轴为(x,y,z) Eigen::AngleAxisd rotation_vector(alpha,Vector3d(x,y,z)) 2,旋转向量转旋转矩阵 Eigen::Matrix3d rotation_matrix; rotation_matrix=rotation_vector.matrix(); Eigen::Matrix3d rotation_matrix; rotation_matrix=rotation_vector.toRotati
点云PCL博主
2022/01/27
3.4K0
地心地固坐标系(ECEF)与站心坐标系(ENU)的转换
我在《大地经纬度坐标与地心地固坐标的的转换》这篇文章中已经论述了地心坐标系的概念。我们知道,基于地心坐标系的坐标都是很大的值,这样的值是不太方便进行空间计算的,所以很多时候可以选取一个站心点,将这个很大的值变换成一个较小的值。以图形学的观点来看,地心坐标可以看作是世界坐标,站心坐标可以看作局部坐标。
charlee44
2021/10/13
9K0
SLAM知识点整理
SLAM的全称——Simultaneous Localization and Mapping(同时定位与地图的构建)。它有三层含义,第一是进行机器人的姿态估计,第二是构建地图,第三是同时进行这两个事情。SLAM是一个鸡生蛋、蛋生鸡的问题,机器人构建地图的时候需要知道自己目前所在的位置(定位),同时在定位到自己的位置之后要进行下一步——走,需要看周围的地图。
算法之名
2022/03/24
1.2K0
SLAM知识点整理
Games101--Assignment3
http://games-cn.org/forums/topic/frequently-asked-questionskeep-updating/
Enterprise_
2020/07/14
1.6K0
Games101--Assignment3
布局转模型无法生成新图形_三维数组初始化
本系列文章为原创,转载请注明出处。 作者:Dongdong Bai 邮箱: baidongdong@nudt.edu.cn
全栈程序员站长
2022/11/02
5330
布局转模型无法生成新图形_三维数组初始化
三维空间的刚体运动
一个刚体在三维空间中的运动如何描述? 我们知道是由旋转加平移组成的,平移很简单,但是旋转有点麻烦。 三维空间的刚体运动的描述方式:旋转矩阵、变换矩阵、四元数、欧拉角。 刚体,不光有位置,而且还有姿态。相机可以看成是三维空间的一个刚体,位置指的就是相机在空间处于哪个地方?而姿态指的是相机的朝向(例如:相机位于(0, 0,0)点处,朝向正东方)但是这样去描述比较繁琐。
Albert_xiong
2021/06/21
1.2K0
三维空间的刚体运动
相关推荐
SLAM初探:Eigen库简单使用
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验