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('电压')");


}



第一章 MATLAB6.5 基础 1.1 MATLAB 语言介绍 1.1.1 MATLAB 产品系列与应用 1.1.2 MATLAB6.5 的新特点 1.2 MATLAB 语言基础 1.2.1 认识 MATLAB6.5 环境 1.2.2 MATLAB6.5 变量和表达式 1.2.3 数组的产生 1.2.4 数组的操作 1.2.5 常用的数学函数 1.2.6 数组的运算 1.2.7 数组的扩展 1.2.8 数组的转换 1.2.9 MATLAB 控制语句 1.2.10 其它控制语句 1.2.11 文件操作 1.2.12 M 文件 第二章 MATLAB 图形绘制基础 2.1 二维绘图 2.1.1 基本绘图函数 2.1.2 图形窗口的修饰 2.2 三维绘图 2.2.1 plot3 函数 2.2.2 三维网格图和曲面图 第三章 MATLAB 图形对象 3.1 图形对象 3.1.1 Root 对象 3.1.2 Figure 对象 3.1.3 Uicontrol 对象 3.1.4 Uimenu 对象 3.1.5 Axes 对象 3.1.6 Image 对象 3.1.7 Line 对象 3.1.8 Patch 对象 3.1.9 Rectangle 对象 3.1.10 Surface 对象 3.1.11 Light 对象 3.1.12 Text 对象 第四章 MATLAB 图形对象操作 4.1 图形对象的属性 4.2 图形对象句柄的获取 4.2.1 对象创建时获取 4.2.2 层次关系来获取 4.2.3 当前对象的获取 4.2.4 根据对象属性值的获取 4.3 图形对象句柄的删除与判断 4.3.1 句柄的删除 4.3.2 句柄的判断 4.4 图形对象属性值的获取与设置 4.4.1 图形对象属性值的设置 4.4.2 图形对象属性值的获取 4.4.3 用户缺省值的操作 4.5 图形对象的其它操作 4.5.1 figflag 函数 4.5.2 findfigs 函数 4.5.3 copyobj 函数 4.5.4 capture 函数 4.5.5 refresh 函数 4.5.6 saveas 函数 4.5.7 hgload 函数和 hgsave 函数 4.5.8 newplot 函数 第五章 GUI 设计 5.1 认识 GUI 环境 5.1.1 版面设计工具 5.1.2 属性编辑器 5.1.3 菜单编辑器 5.1.4 调整工具 5.1.5 对象浏览器 5.1.6 TAB 次序编辑器 5.1.7 GUIDE 环境设置 5.2 GUI 设计 5.2.1 GUI 设计原则 5.2.2 GUI 设计步骤 5.3 GUI 实现 5.3.1 组件的布局 5.3.2 属性编辑 5.3.3 回调函数 5.4 GUI 实例 5.4.1 组件布局 5.4.2 属性值的修改 5.4.3 回调函数 5.4.4 调试程序 5.4.5 执行的效果 5.4.6 结束语 第六章 MATLAB 特殊图形的绘制 6.1 区域图 6.2 填充图 6.2.1 二维填充图 6.2.2 三维填充图 6.3 条形图 6.3.1 二维条形图 6.3.1 三维条形图 6.4 直方图 6.4.1 笛卡儿坐标系下的直方图 6.4.2 极坐标系下的直方图 6.5 圆体图 6.5.1 圆柱体的绘制 6.5.2 球体的绘制 6.5.3 椭圆体的绘制 6.6 饼图 6.6.1 二维饼图 6.6.2 三维饼图 6.7 排列图 6.8 离散图形的绘制 6.8.1 二维柄状图 6.8.2 三维柄状图 6.8.3 阶梯图 6.9 散点图 6.9.1 二维散点图 6.9.2 三维散点图 6.9.3 散点图矩阵 6.10 轮廓图 6.10.1 二维轮廓图 6.10.2 三维轮廓图 6.11 向量图 6.11.1 罗盘图 6.11.2 羽状图 6.11.3 箭头图 6.11.4 法线图 第七章 MATLAB 高级绘图功能 7.1 彗星图 7.1.1 二维彗星轨迹图 7.1.2 三维彗星轨迹图 7.2 帧动画 7.3 程序动画 7.4 色图变幻 7.5 Voronoi 图和三角剖分 7.6 四面体 7.7 彩带图 7.7.1 彩带图 7.7.2 三维流彩带图 7.8 伪彩图 7.9 切片图 7.9.1 切片图 7.9.2 切片轮廓线图 7.10 网格图和曲面图特效 7.10.1 显示轮廓线 7.10.2 显示围裙 7.10.3 瀑布效果 7.10.4 带光
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

woquNOKIA

谢谢老板!

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

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

打赏作者

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

抵扣说明:

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

余额充值