2016-04-17 8 views
0

私は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の

+0

私は、MATLABコードでハードコーディングするのではなく、Cコードでハードコーディングして得られたものを理解しているかどうかはわかりません。あなたの質問に含まれていないCコードのどこかに、プログラムで生成されたパスがありますか? – excaza

+0

パスは私のC++コードによって生成されます。これが私がmファイルに文字列変数として渡す必要がある理由です。 – TheEpok

答えて

0

私はあなただけに必要があると思い際に変数がもたらすメリット何が表示されませんとにかく変数の値を更新してください。

相対パスを使用することをお勧めします。saveas(gcf, 'test.png')ファイルは現在の作業ディレクトリから取得されます。 The documentationは実際にはこれを完全には明示していませんが、基本的にコンピュータがどのように動作するのですか?試してごらん!

+0

申し訳ありませんが、私はあなたが何を意味するかを見て、それは可能性です。たぶん私は最初の投稿でそれを精密化していないかもしれませんが、C++コードは毎回新しいフォルダを生成します(毎回新しいフォルダ名で)。私はmatlabに変数としてその新しいフォルダの名前を渡したいと思います。そのようなことが可能ならば。 – TheEpok

関連する問題