[Eigen]Eigen 简单实现matlab中的meshgrid

笔者电脑上曾经配置过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

matlab结果

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值