私はmatlabには新しく、コーディングは自分の仕事ではなく、私はちょうどいくつかのサイドプロジェクトのために使っています。だから、私が話していることは本当に分かっていません。私はあなたがそれを理解することを願っています:)私のC++コードとmatlabとの間で文字列変数を渡す
私は自分のコンピュータにmatlabをインストールしました。そのライブラリを使って、実行中に非常に簡単なグラフを描きます私のコードの(ヒストグラム、散布図など)。これらのグラフをプロットすることは私のコードの最初の目的ではなく、CSVファイルとしてエクスポートしてExcelで手動でプロットするのではなく、実行中にプロットする方が簡単です。
質問:私は、Visual C++を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');
私はメートルに私のハードコードされたパスを置き換えることができますどのようにファイル( "C:\ PhD \ SVG2GMSH \ SVG \ test.png")に、それを含むよりエレガントな変数を指定しますか?
ありがとうございました。また、あなたがより良い私のコードを見て/仕事をするために他の提案を持っているなら、私に知らせて:)
Floの
私は、MATLABコードでハードコーディングするのではなく、Cコードでハードコーディングして得られたものを理解しているかどうかはわかりません。あなたの質問に含まれていないCコードのどこかに、プログラムで生成されたパスがありますか? – excaza
パスは私のC++コードによって生成されます。これが私がmファイルに文字列変数として渡す必要がある理由です。 – TheEpok