C++调用matlab引擎实现三维图的绘制

 更新时间:2022年12月27日 10:29:24   作者:杨铮...  
这篇文章主要为大家详细介绍了C++如何调用matlab引擎实现三维图的绘制,文中的示例代码讲解详细,对我们学习C++和Matlab有一定的帮助,需要的可以参考一下

VS2012设置

项目–项目属性–配置属性–VC++目录–包含目录 D:\MATLAB\R2016a\extern\include

项目–项目属性–配置属性–VC++目录–库目录

D:\MATLAB\R2016a\extern\lib\win64\microsoft

添加依赖项有两种方法:

方法一:项目中设置

项目–项目属性–配置属性–链接器–输入–添加依赖项

libmx.lib
libmat.lib
libmex.lib
mclmcr.lib
mclmcrrt.lib
libemlrt.lib
libeng.lib
libfixedpoint.lib
libcovrt.lib

方法二:程序中添加

#pragma comment(lib,“libmx.lib”)
#pragma comment(lib,“libmat.lib”)
#pragma comment(lib,“libmex.lib”)
#pragma comment(lib,“mclmcr.lib”)
#pragma comment(lib,“mclmcrrt.lib”)
#pragma comment(lib,“libemlrt.lib”)
#pragma comment(lib,“libeng.lib”)
#pragma comment(lib,“libfixedpoint.lib”)
#pragma comment(lib,“libcovrt.lib”)

计算机–属性–高级系统设置–环境变量–系统变量–Path–新建

D:\MATLAB\R2016a\bin\win64

matlab程序

pt.m文件

clc;clear;close all;
% 定义点(x,y,z)
x = randn(50,1);
xmax = max(x);
xmin = min(x);
y = randn(50,1);
ymax = max(y);
ymin = min(y);
z = exp(sin(x.^2)) + exp(cos(y.^2));
N = 500; % 每个维度的数据点数
% 网格化x,y二维空间
[X,Y] = meshgrid(linspace(xmin,xmax,N),linspace(ymin,ymax,N));
% 采用插值法扩展数据,可用方法有'linear'(default)|'nearest'|'natural'|'cubic'|'v4'|
Z = griddata(x,y,z,X,Y,'v4');

%% 等高线法
figure('NumberTitle','off','Name','等高线法','Color','w','MenuBar','none','ToolBar','none');
contourf(X,Y,Z,N, 'LineColor','none');
colormap('jet');
colorbar;
axis off;

%{
%% 投影图法
figure('NumberTitle','off','Name','投影图法','Color','w','MenuBar','none','ToolBar','none');
surf(X,Y,Z,'LineStyle','none');
xlim([min(X(:)) max(X(:))]);
ylim([min(Y(:)) max(Y(:))]);
axis off;
colormap('jet');
colorbar;
shading interp;
view(0,90);

%% imagesc法
figure('NumberTitle','off','Name','imagesc法','Color','w','MenuBar','none','ToolBar','none');
% 因为图像坐标和笛卡尔坐标起始位置不一样,需要上下翻转
imagesc(flipud(Z));
colormap('jet');
colorbar;
axis off;

%% pcolor法
figure('NumberTitle','off','Name','pcolor法','Color','w','MenuBar','none','ToolBar','none');
pcolor(X,Y,Z);
colormap('jet');
colorbar;
shading interp;
axis off;
%}

VS2012控制台程序

matlab.cpp文件

#include "stdafx.h"
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include "engine.h" 


// 方法一
#pragma comment(lib,"libmx.lib")
#pragma comment(lib,"libmat.lib")
#pragma comment(lib,"libmex.lib")
#pragma comment(lib,"mclmcr.lib")
#pragma comment(lib,"mclmcrrt.lib")
#pragma comment(lib,"libemlrt.lib")
#pragma comment(lib,"libeng.lib")
#pragma comment(lib,"libfixedpoint.lib")
#pragma comment(lib,"libcovrt.lib")

int _tmain(int argc, _TCHAR* argv[])
{
	Engine *ep;
	if (!(ep = engOpen("\0")))
	{
	fprintf(stderr, "\nCan't start MATLAB engine\n");
	return EXIT_FAILURE;
	}
 
	//隐藏matlab命令窗口
	engSetVisible(ep, 0);
 
	/*
	// 测试
	engEvalString(ep, " clc;clear;close all;\
						% 定义点(x,y,z)\
						x = randn(50,1);\
						xmax = max(x);\
						xmin = min(x);\
						y = randn(50,1);\
						ymax = max(y);\
						ymin = min(y);\
						z = exp(sin(x.^2)) + exp(cos(y.^2));\
						N = 500; % 每个维度的数据点数\
						% 网格化x,y二维空间\
						[X,Y] = meshgrid(linspace(xmin,xmax,N),linspace(ymin,ymax,N));\
						% 采用插值法扩展数据,可用方法有'linear'(default)|'nearest'|'natural'|'cubic'|'v4'|\
						Z = griddata(x,y,z,X,Y,'v4');\
						figure('NumberTitle','off','Name','等高线法','Color','w','MenuBar','none','ToolBar','none');\
						contourf(X,Y,Z,N, 'LineColor','none');\
						colormap('jet');\
						colorbar;\
						axis off;\
				  ");

*/

/*
	// 测试
	engEvalString(ep, "figure;");
 */ 

/*
	// 切换至 pt.m 所在文件夹
	engEvalString(ep, "cd C:\\Users\\Administrator\\Desktop\\matlab\\figure;	");
	// 运行 pt.m 
	engEvalString(ep, "run pt");
*/
	engEvalString(ep, "cd C:\\Users\\Administrator\\Desktop\\matlab\\figure;\
					  run pt;\
				 ");
 
	
	printf("按任意键继续\n");
	fgetc(stdin);
	engEvalString(ep, "close;");
	engClose(ep);
 
return EXIT_SUCCESS;
}

运行结果

说明

VS2012新建名称为“matlab”项目,在“matlab”项目文件夹下新建figure文件夹,figure文件夹中放matlab画图程序 pt.m。

VS2012编译平台选择与matlab版本对应起来,文章选择的是64位。

到此这篇关于C++调用matlab引擎实现三维图的绘制的文章就介绍到这了,更多相关C++ matlab绘制三维图内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • QT使用udp实现发送与接收图片

    QT使用udp实现发送与接收图片

    这篇文章主要为大家详细介绍了QT如何使用udp协议实现发送与接收图片功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-12-12
  • C++设计模式编程中的迭代器模式应用解析

    C++设计模式编程中的迭代器模式应用解析

    这篇文章主要介绍了C++设计模式编程中的迭代器模式应用解析,迭代器模式注重对集合中元素的遍历而不使其暴露,需要的朋友可以参考下
    2016-03-03
  • Matlab实现带竖线散点的核密度图的绘制

    Matlab实现带竖线散点的核密度图的绘制

    核密度估计是用于估计随机变量概率密度函数的一种非参数方法。核密度图不失为一种用来观察连续型变量分布的有效方法。本文将用Matlab实现带竖线散点的核密度图的绘制,感兴趣的可以了解一下
    2022-08-08
  • C++中getline()、gets()等函数的用法详解

    C++中getline()、gets()等函数的用法详解

    这篇文章主要介绍了C++中getline()、gets()等函数的用法,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-02-02
  • C++ 11实现检查是否存在特定的成员函数

    C++ 11实现检查是否存在特定的成员函数

    C++11/14相比以往的C++98/03在很多方面做了简化和增强,尤其是在泛型编程方面,让C++的泛型编程的威力变得更加强大,下面这篇文章主要介绍了利用C++ 11实现检查是否存在特定成员函数的相关资料,需要的朋友可以参考下。
    2017-02-02
  • 如何为Qt视图中的文字实现彩虹渐变效果

    如何为Qt视图中的文字实现彩虹渐变效果

    这篇文章主要给大家介绍了关于如何为Qt视图中的文字实现彩虹渐变效果的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者使用Qt具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-03-03
  • C++右值引用与移动构造函数基础与应用详解

    C++右值引用与移动构造函数基础与应用详解

    左值和右值都是针对表达式,左值是指表达式结束后依然存在的持久对象,右值是指表达式结束时就不再存在的临时对象,下面这篇文章主要给大家介绍了关于C++11右值引用和移动语义的相关资料,需要的朋友可以参考下
    2023-02-02
  • wxWidgets实现无标题栏窗口拖动效果

    wxWidgets实现无标题栏窗口拖动效果

    这篇文章主要为大家详细介绍了wxWidgets实现无标题栏窗口拖动效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-02-02
  • C语言实现自动存取款机模拟系统

    C语言实现自动存取款机模拟系统

    这篇文章主要为大家详细介绍了C语言实现自动存取款机模拟系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-05-05
  • c++将引用或者是指针作为函数参数实现实参的运算

    c++将引用或者是指针作为函数参数实现实参的运算

    这篇文章主要介绍了c++将引用或者是指针作为函数参数实现实参的运算,需要的朋友可以参考下
    2014-05-05

最新评论