|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?我要加入
x
本帖最后由 sunminmin 于 2011-5-10 08:47 编辑
在matlab的commond窗口中键入下面的代码能得到map.txt对应的图形:(注:map.txt中每一行为一个点的坐标(x,y,z)。)
- M = dlmread('map.txt'); % 读取map.txt文件中的数据
- x = M(:,1); % 取第一列
- y = M(:,2); % 取第二列
- z = M(:,3); % 取第三列
- x = reshape(x,65,65); % 重构为size=65*65的方格
- y = reshape(y,65,65); % 重构为size=65*65的方格
- z = reshape(z,65,65); % 重构为size=65*65的方格
- surf(x,y,z) % 绘图
- shading flat %各小曲面之间不要网格
- xlabel('X(单位:千米)')
- ylabel('Y(单位:千米)')
- zlabel('Z(单位:千米)')
复制代码
但是在VC++中建立MFC AppWizard基于基本对话框的工程TxtToMap,调用matlab引擎绘不出map.txt对应的图形:
- void CTxtToMapDlg::OnButtonBrowsing()
- {
- // TODO: Add your control notification handler code here
- char szFilters[] = "MyType Files (*.txt)|*.txt|All Files (*.*)|*.*||";
- CFileDialog fileDlg (TRUE, "txt", "*.txt",OFN_FILEMUSTEXIST| OFN_HIDEREADONLY, szFilters, this);
- // Display the file dialog. When user clicks OK, fileDlg.DoModal()
- // returns IDOK.
- if( fileDlg.DoModal()==IDOK )
- {
- CString pathName = fileDlg.GetPathName();
- m_FilePath = pathName; //m_FilePath里保存txt文件的路径
- UpdateData(FALSE);
- }
- }
复制代码- void CTxtToMapDlg::OnButtonTxtToMap()
- {
- // TODO: Add your control notification handler code here
- Engine *ep;
- if (!(ep = engOpen(NULL))) //打开Matlab引擎
- {
- MessageBox ("Can't start MATLAB engine", MB_OK);
- exit(-1);
- }
- int N = 4225;
- mxArray *M = mxCreateDoubleMatrix(N,3,mxREAL);
- mxArray *x = mxCreateDoubleMatrix(1,N,mxREAL);
- mxArray *y = mxCreateDoubleMatrix(1,N,mxREAL);
- mxArray *z = mxCreateDoubleMatrix(1,N,mxREAL);
- engPutVariable(ep,"M",M);
- engPutVariable(ep,"x",x);
- engPutVariable(ep,"y",y);
- engPutVariable(ep,"z",z);
- engEvalString(ep,"M = dlmread('m_FilePath')"); //m_FilePath保存map.txt的路径,读取map.txt文件中的数据
- engEvalString(ep,"x = M(:,1)"); //取第一列
- engEvalString(ep,"y = M(:,2)"); // 取第二列
- engEvalString(ep,"z = M(:,3)"); // 取第三列
- engEvalString(ep,"x = reshape(x,65,65)"); //重构为size=65*65的方格
- engEvalString(ep,"y = reshape(y,65,65)"); //重构为size=65*65的方格
- engEvalString(ep,"z = reshape(z,65,65)"); //重构为size=65*65的方格
- engEvalString(ep,"surf(x,y,z)"); //绘图
- }
复制代码
我刚开始学vc++与matlab混合编程调用matlab引擎,我自己也知道上面void CTxtToMapDlg::OnButtonTxtToMap() 中的代码写的有错,请问如何修改才能得到map.txt对应的图形?
map.rar
(29.55 KB, 下载次数: 2)
|
|