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
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

woquNOKIA

谢谢老板!

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

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

打赏作者

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

抵扣说明:

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

余额充值