笔者电脑上曾经配置过osg的环境变量,其中有osg/3rdParty/include文件夹,将Eigen3的文件夹都放在里面,visualstudio就可通过环境变量自动找到Eigen库所在的位置。
直接贴代码:第一次使用Eigen3,头文件包含#include<Eigen/Dense>就可以了。不过中间遇到了不少坑,一步步Debug过来的。
VisualStudio中新建项目,然后add->item->main.cpp把代码复制进去可以进行测试。
- C++代码
#include "../Common/common.h"
#include <iostream>
#ifdef _DEBUG
#pragma comment(lib, "../x64/Debug/Common.lib")
#else
#pragma comment(lib, "../x64/Release/Common.lib")
#endif
using Eigen::MatrixXd;
using Eigen::VectorXd;
/**
核心思想:
vecX按行复制,复制长度为vecY的长度vecY.size()
vecY按列复制,复制长度为vecX的长度vecX.size()
*/
//返回两个行列方阵矩阵
void meshgrid(
Eigen::VectorXd &vecX, Eigen::VectorXd &vecY, Eigen::MatrixXd &meshX, Eigen::MatrixXd &meshY)
{
int vecXLength = vecX.size();
int vecYLength = vecY.size();
//meshX.resize(vecXLength, vecYLength);
//meshY.resize(vecXLength, vecYLength);
//std::cout << "meshX.size()\n" << meshX.size() << "\n" << "meshY.size()\n" << meshY.size() << std::endl;
for (int i = 0; i < vecYLength; ++i)
{
meshX.row(i) = vecX;
//std::cout << "meshX.row("<< i <<")\n" << meshX.row(i)<< std::endl;
}
for (int i = 0; i < vecXLength; ++i)
{
meshY.col(i) = vecY.transpose();
//std::cout << "meshX.row(" << i << ")\n" << meshY.col(i) << std::endl;
}
}
int main()
{
Eigen::VectorXd vecX,vecY;
vecX.setZero(3, 1);
vecY.setZero(5, 1);
std::cout << "vecX\n" << vecX<<"\n"<< "vecY\n"<< vecY << std::endl;
vecX = Eigen::VectorXd::LinSpaced(vecX.size(), 1, 3);
vecY = Eigen::VectorXd::LinSpaced(vecY.size(), 1, 5);
std::cout << "vecX\n" << vecX << "\n" << "vecY\n" << vecY << std::endl;
Eigen::MatrixXd meshX, meshY;
meshX.setZero(5, 3);
meshY.setZero(5, 3);
meshgrid(vecX, vecY, meshX, meshY);
std::cout <<"meshX\n"<< meshX << std::endl;
std::cout << "meshY\n" << meshY << std::endl;
return 0;
}
- matlab代码
x1 = 1:3;
y1= 1:5;
[meshx1,meshy1] = meshgrid(x1,y1);
-
运行结果
-
- eigen
- eigen
-
- matlab