将我的c ++代码之间的字符串变量传递给matlab

时间:2016-04-17 14:24:32

标签: c++ matlab plot

我是matlab的新手,编码不是我的工作,我只是将它用于一些辅助项目。所以我不知道我在说什么,我希望你能理解:)

所以我在我的计算机上安装了matlab,并想在我的代码执行期间使用它的库绘制一些非常简单的图形(直方图,散点图,等等)。绘制这些图形不是我的代码的第一个目的,我发现在执行期间更容易绘制它们而不是将它们作为CSV文件导出,然后通过excel手动绘制。

问题:我设法制作了视觉C ++和#34;沟通"用matlab。我正在使用数组传递一些数据,但我也希望传递一个字符串(例如" C:\ test \"这样的路径),因为我想自动保存这些数据图表一旦生成精确的目录。到目前为止,我还没有找到任何办法。

这是我的c ++代码,非常简单:

Engine *ep;
ep = engOpen(NULL);

double *ArrayOne;
double *ArrayTwo;

const int  Asize = Area.size();

ArrayOne = new double[Asize];
ArrayTwo = new double[Asize];

for (int i = 0; i <= Area.size() - 1; i++) {
    ArrayOne[i] = Area[i][1];
    ArrayTwo[i] = Area[i][2] 
}

mxArray* ONE = mxCreateDoubleMatrix(Asize, 1, mxREAL);
memcpy((void*)mxGetPr(ONE), (void*)ArrayOne, sizeof(double)*Asize);
engPutVariable(ep, "one", ONE);

mxArray* TWO = mxCreateDoubleMatrix(Asize, 1, mxREAL);
memcpy((void*)mxGetPr(TWO), (void*)ArrayTwo, sizeof(double)*Asize);
engPutVariable(ep, "two", TWO);

engEvalString(ep, "plottest");

delete[]ArrayOne;
delete[]ArrayTwo;

engClose(ep);

文件Plottest.m:

h1= histogram(one);
h1.EdgeColor = 'black';
h1.FaceColor = 'white';
hold on;
h2 = histogram(two);
h2.EdgeColor = 'blue';
h2.FaceColor = [0.5 0.5 0.5];

alpha(h1,.5);
alpha(h2,.8);
saveas(gcf,'C:\PhD\SVG2GMSH\SVG\test.png');

如何通过一个包含它的更优雅的变量将我的硬编码路径替换为我的m文件(&#34; C:\ PhD \ SVG2GMSH \ SVG \ test.png&#34;)?

感谢您的帮助。另外,如果您有任何其他建议以便让我的代码看起来/工作更好,请告诉我:)

弗洛

1 个答案:

答案 0 :(得分:0)

当你只需要更新变量的值时,我看不到变量会带来什么好处。

最好的办法是使用相对路径:saveas(gcf, 'test.png') ,然后从当前工作目录中获取文件。 The documentation实际上并没有完全说明这一点,但它基本上就是计算机的工作方式,所以......试试吧!