c++中Matrix函数的使用


1. 添加头文件

#include <Eigen/Geometry>

2. 定义名字空间

using namespace Eigen;
  • 如果没有这一步,后面直接用Matrix<double, 3, 3>定义的话仍会报错:use of undeclared identifier 'Matrix’

3. 定义矩阵

Matrix<double, 3, 3> R_pitch;
R_pitch << 1.0, 0.0, 0.0,
        0.0, cos(eu2_.pitch), sin(eu2_.pitch),
        0.0, -sin(eu2_.pitch), cos(eu2_.pitch);

4. 矩阵乘法

Matrix<double, 3, 3> R_roll;
Matrix<double, 3, 3> temp = R_pitch * R_roll
  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在++Matrix4d通常也是由程序员自己定义的一个类或结构体,用于表示4x4的矩阵。以下是一个简单的Matrix4d类的示例: ```c++ class Matrix4d { public: double m[4][4]; Matrix4d() { memset(m, 0, sizeof(m)); } Matrix4d operator*(const Matrix4d& other) const { Matrix4d result; for (int i = 0; i < 4; i++) { for (int j = 0; j < 4; j++) { result.m[i][j] = m[i][0] * other.m[0][j] + m[i][1] * other.m[1][j] + m[i][2] * other.m[2][j] + m[i][3] * other.m[3][j]; } } return result; } Vector4d operator*(const Vector4d& v) const { double x = m[0][0] * v.x + m[0][1] * v.y + m[0][2] * v.z + m[0][3] * v.w; double y = m[1][0] * v.x + m[1][1] * v.y + m[1][2] * v.z + m[1][3] * v.w; double z = m[2][0] * v.x + m[2][1] * v.y + m[2][2] * v.z + m[2][3] * v.w; double w = m[3][0] * v.x + m[3][1] * v.y + m[3][2] * v.z + m[3][3] * v.w; return Vector4d(x, y, z, w); } void setIdentity() { memset(m, 0, sizeof(m)); m[0][0] = m[1][1] = m[2][2] = m[3][3] = 1; } void setTranslation(double x, double y, double z) { setIdentity(); m[0][3] = x; m[1][3] = y; m[2][3] = z; } void setRotationX(double angle) { setIdentity(); double cosA = cos(angle); double sinA = sin(angle); m[1][1] = cosA; m[1][2] = -sinA; m[2][1] = sinA; m[2][2] = cosA; } void setRotationY(double angle) { setIdentity(); double cosA = cos(angle); double sinA = sin(angle); m[0][0] = cosA; m[0][2] = sinA; m[2][0] = -sinA; m[2][2] = cosA; } void setRotationZ(double angle) { setIdentity(); double cosA = cos(angle); double sinA = sin(angle); m[0][0] = cosA; m[0][1] = -sinA; m[1][0] = sinA; m[1][1] = cosA; } void setScale(double x, double y, double z) { setIdentity(); m[0][0] = x; m[1][1] = y; m[2][2] = z; } void setPerspective(double fov, double aspect, double near, double far) { setIdentity(); double f = 1.0 / tan(fov * 0.5); m[0][0] = f / aspect; m[1][1] = f; m[2][2] = (far + near) / (near - far); m[2][3] = 2 * far * near / (near - far); m[3][2] = -1; m[3][3] = 0; } }; ``` 上述代码定义了一个4x4矩阵Matrix4d,它包含了矩阵乘法、向量乘法、单位矩阵、平移、旋转和缩放等常用的矩阵操作。程序员可以使用这个类来进行矩阵的计算和操作,例如: ```c++ Matrix4d mat; mat.setIdentity(); // 设置为单位矩阵 Matrix4d mat2; mat2.setTranslation(1, 2, 3); // 设置平移矩阵 Matrix4d mat3 = mat * mat2; // 矩阵相乘 Vector4d v(1, 2, 3, 1); Vector4d v2 = mat3 * v; // 矩阵与向量相乘 ``` 以上代码演示了如何创建一个Matrix4d对象mat,以及如何使用Matrix4d类的各种方法对它进行操作和计算。程序员可以使用这个类来进行3D图形的变换,例如平移、旋转、缩放和投影等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值