我想用gnuplot绘制3D图(x,y,z)。
为了做到这一点,我想到在C ++中使用fstream将文本文件写入文本文件,然后根据this post使用splot获取数据矩阵的3D图。
假设这是正确的方法,文本文件中的数据应如下所示:
x[1] x[2] x[3]
y[1] z[1][1] z[1][2] z[1][2]
y[2] z[2][1] z[1][2] z[2][3]
y[3] z[3][1] z[3][2] z[3][3]
为了获得矩阵,我编写了以下代码:
fstream myfile;
myfile.open("example.txt",fstream::out);
//rows
for (int j=0; j< 3;j++)
{
myfile << x[j]<< std::endl;
}
//columns
for (int i=0; i< 3;i++)
{
myfile << y[i]<< std::endl;
}
//columns
for (int i=1; i< 3;i++)
{
//rows
for (int j=1; j< 3;j++)
{
myfile << z[i][j] << std::endl;
}
}
myfile.close();
我以这种方式将所有内容都放在一列中,所以问题是如何打印矩阵?
答案 0 :(得分:3)
这样的事情应该有效,(我假设您需要在矩阵的每个元素之间使用制表符,如果需要,请输入逗号)
fstream myfile;
myfile.open("example.txt",fstream::out);
for (int j=0; j< 3;j++)// Prints row of x
{
myfile << x[j]<< "\t";
}
myfile<< std::endl;
for (int i=0; i< 3;i++) //This variable is for each row below the x
{
myfile << y[i]<< "\t";
for (int j=0; j<3;j++)
{
myfile << z[i][j] << "\t";
}
myfile<<std::endl;
}
myfile.close();
答案 1 :(得分:0)
如果我没有弄错,你的循环定义不是很明确,你应该知道std :: endl会跳转到一个新行,这就是你获得1列的原因。 试试:
for (int j=0; j< 3;j++){
myfile << x[j] <<"\t";
}
myfile<< std::endl;
for(int j=0 ; j<3 ; j++){
myfile << y[j]<<"\t";
for(int i=0;i<3;i++)
myfile << z[j]x[i]<<"\t";
myfile<< std::endl;
}