vc 调用matlab figure 画图

我的环境 matlab7.0, vs2012.执行mex -setup 和mbuild -setup 是选的vc6,vs执行命令的时候不可见

参考1:http://www.ilovematlab.cn/thread-205148-1-1.html

http://blog.csdn.net/nupt123456789/article/details/7463612

调用matlab动态库,使用matlab2010b可以,使用matlab7.0不可以,好像是7.0的问题,有大神碰到过可以指教一下哦。谢谢


//以上是调用动态库

//以下是调用matlab的figure画图

参考2:http://blog.csdn.net/u010177286/article/details/37561113 //一些添加注释的方法

参考3:http://blog.csdn.net/feichizhongwu888/article/details/47277565 //引擎的函数介绍,妻例子我没编译过

参考4:http://blog.sina.com.cn/s/blog_8e6bfecf010126pg.html //这个例子的数据是写好的无法传自己想要的数据,主要可以参考 他的工程的配置方法。

参考5:http://www.tuicool.com/articles/JZzmmiB //这个不错,有一点小问题,engClose(ep);要重写,可能是网页格式的问题,非常感谢

我的例子如下:

void CMFCmtalabDlg::OnBnClickedOk2()
{
Engine* ep;
mxArray *x1 = NULL;
mxArray *y1 = NULL;
mxArray *x2 = NULL;
mxArray *y2 = NULL;
ep = engOpen(NULL);
if( ep==NULL ) 

printf("engine not found!\n"); 
exit(-1);
}
//engOutputBuffer(ep, buffer, BUFFER_SIZE);
printf("Init Success");


double x[5] = { 2.0, 4.5,6.7,8.4,9.1 };
double y[5] = { 3.3,4.7,9.6,15.6,21.3 };
double xArr[5] = { 1.0,2.0,3.0,4.0,5.0 };
double yArr[5] = { 4.0,8.0,12.0,16.0,20.0 };


x1 = mxCreateDoubleMatrix(1, 5, mxREAL);
y1 = mxCreateDoubleMatrix(1, 5, mxREAL);
x2 = mxCreateDoubleMatrix(1, 5, mxREAL);
y2 = mxCreateDoubleMatrix(1, 5, mxREAL);


memcpy((void *)mxGetPr(x1), (void *)x, sizeof(x));
memcpy((void *)mxGetPr(y1), (void *)y, sizeof(y));
memcpy((void *)mxGetPr(x2), (void *)xArr, sizeof(xArr));
memcpy((void *)mxGetPr(y2), (void *)yArr, sizeof(yArr));

engPutVariable(ep, "x2", x2);
engPutVariable(ep, "y2", y2);
engPutVariable(ep, "x1", x1);
engPutVariable(ep, "y1", y1);


//engEvalString(ep, "plot(x1,y1)");
//engEvalString(ep, "hold on");
//engEvalString(ep, "plot(x2,y2)");
//或
engEvalString(ep, "plot(x1,y1,'r',x2,y2,'g')"); //y1是红色,y2是绿色

engEvalString(ep, "title('This psq test!')");
engEvalString(ep, "xlabel('时间')");
engEvalString(ep, "ylabel('电压')");
engEvalString(ep, "text(2,5,'曲线y1=x')");//添加曲线注释
engEvalString(ep, "legend('电压','电流')  ");//加图例

}

//以上这个姿势是一下画2条曲线,也可以在2个button中去响应画2次,但颜色会一样,Engine* ep;是局部变量或成员变量无所谓,不改变什么

//以下这2个函数是使用的成员变量,每次只显示以1条曲线,在一个图中,

void CMFCmtalabDlg::OnBnClickedOk3()
{
if(m_ep != NULL)
{
engClose(m_ep);
}
Sleep(1000); //这个不能少,
m_ep = engOpen(NULL);
if( m_ep==NULL ) 

MessageBox(_T("could not open 引擎指针"));
}
mxArray *x1 = NULL;
mxArray *y1 = NULL;
double x[5] = { 1.0, 2.5,3.7,4.4,5.1 };
double y[5] = { 3.3,4.7,9.6,15.6,21.3 };
x1 = mxCreateDoubleMatrix(1, 5, mxREAL);
y1 = mxCreateDoubleMatrix(1, 5, mxREAL);
memcpy((void *)mxGetPr(x1), (void *)x, sizeof(x));
memcpy((void *)mxGetPr(y1), (void *)y, sizeof(y));
engPutVariable(m_ep, "x1", x1);
engPutVariable(m_ep, "y1", y1);
engEvalString(m_ep, "plot(x1,y1)");
engEvalString(m_ep, "hold on");
}


//OnBnClickedOk3和 是指画一个
void CMFCmtalabDlg::OnBnClickedOk4()
{
if(m_ep != NULL)
{
engClose(m_ep);
}
Sleep(1000);
m_ep = engOpen(NULL);
if( m_ep==NULL ) 

MessageBox(_T("could not open 引擎指针"));
}
mxArray *x2 = NULL;
mxArray *y2 = NULL;
double xArr[5] = { 1.0,2.0,3.0,4.0,5.0 };
double yArr[5] = { 4.0,8.0,12.0,16.0,20.0 };


x2 = mxCreateDoubleMatrix(1, 5, mxREAL);
y2 = mxCreateDoubleMatrix(1, 5, mxREAL);
memcpy((void *)mxGetPr(x2), (void *)xArr, sizeof(xArr));
memcpy((void *)mxGetPr(y2), (void *)yArr, sizeof(yArr));


engPutVariable(m_ep, "x2", x2);
engPutVariable(m_ep, "y2", y2);
engEvalString(m_ep, "plot(x2,y2,'r')"); //红色的曲线
engEvalString(m_ep, "hold on");
engEvalString(m_ep, "title('This psq test!')");
engEvalString(m_ep, "xlabel('时间')");
engEvalString(m_ep, "ylabel('电压')");


}



  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
VC(Visual C++)是一种编程语言和集成开发环境,可以用于开发各种应用程序。MATLAB是一种数学计算软件,拥有强大的数学函数和算法,可以用于数据处理、数学建模、仿真等领域。 在VC调用MATLAB可以通过以下步骤实现。 首先,需要确保你的计算机上安装了MATLAB软件,并且配置了MATLAB的环境变量。 接下来,在VC的项目中添加MATLAB引擎的相关头文件和链接库,这些文件通常位于MATLAB的安装目录下的extern文件夹中。 然后,可以使用MATLAB引擎提供的函数来调用MATLAB。一般而言,可以使用engOpen函数打开MATLAB引擎,然后使用engEvalString函数执行MATLAB语句,最后使用engClose函数关闭MATLAB引擎。 通过这些函数,可以在VC调用MATLAB的功能,比如计算数学表达式、处理矩阵、执行脚本等。同时,还可以将数据在VCMATLAB之间进行传递,例如将数据从VC传递给MATLAB进行计算,或者将计算结果从MATLAB传递给VC进行后续处理。 需要注意的是,由于VCMATLAB是不同的编程环境,因此调用MATLAB需要一定的编程技巧和经验。在调用MATLAB时,还需要考虑数据类型的转换、错误处理等问题,以确保调用的正确性和稳定性。 总结而言,通过在VC调用MATLAB,可以充分发挥两者的优势,实现更复杂的计算和处理功能。这种方法可以应用于很多领域,如图像处理、信号处理、机器学习等,为开发人员提供了更多的选择和灵活性。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

woquNOKIA

谢谢老板!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值