比如说我们有这个数组:
x =
0.5920 0.4635
0.6451 0.2118
-0.1206 -0.6036
0.2417 0.4773
0.3029 0.5172
我需要编写什么代码才能以这种方式打印:
coords
x1 0.5920 y1 0.4635
x2 0.6451 y2 0.2118
x3 -0.1206 y3 -0.6036
x4 0.2417 y4 0.4773
x5 0.3029 y5 0.5172
我已经尝试过了:
x = gallery('uniformdata',[1,10],0);
y = gallery('uniformdata',[1,10],1);
[v,c] = voronoin([x(:) y(:)]); %returns an array V with vertices and a cell array C with a matrix for each cell of the diagram.
c
for k = 1 : numel(c)
c{k} = c{k}(c{k} ~= 1)
end
fileID = fopen('cords.txt' , 'w');
for i=1:10
coord = v(c{i},:);
fprintf(fileID,'shape %d:\nx \t y\n', i);
fprintf(fileID,'%.4f %.4f\n', coord(:,1), coord(:,2));
end
fclose(fileID);
但是我得到这样的输出:
shape 10:
x y
0.5920 0.6451 %notice how the .6451 is on the right side when it should be on the bottom
-0.1206 0.2417
0.3029 0.4635
0.2118 -0.6036
0.4773 0.5172
答案 0 :(得分:3)
fprintf
函数首先以列的方式读取输入变量,并将每个值发送到字符串中的相应位置。因此,在您的代码中发生的事情是,即使您在代码中为每个%.4f
指定了两个不同的向量,Matlab也会忽略该顺序。它将coord(:, 1)
的第一个值放在第一个%.4f
中,将第二个coord(:, 1)
的值放在第二个%.4f
中。然后它打破了界限。然后,它再次从coord(:, 1)
中提取第三个值,并将其放在第一个%.4f
中,依此类推。仅当第一个向量的所有值都用完时,才会从coord(:, 2)
中选择值。
最简单的解决方法是转置coord
矩阵,然后像这样将其输入到Matlab:
fprintf(fileID,'%.4f %.4f\n', coord.'); % .' tranposes the matrix
编辑:
要获得x1 0.5920 y1 0.4635
的格式,我们可以利用Matlab遵循的列优先顺序来访问变量
% First we make a new matrix that has each of the required elements for the desired format
% The index of x, the value of x, the index of y and the value of y
tempCoord = [1:size(coord, 1); coord(:, 1).'; 1:size(coord, 1); coord(:, 2).'];
% Now we change the string specification for fprintf
fprintf(fileID,'x%d %.4f y%d %.4f\n', tempCoord);
为什么这样做?
如果查看tempCoord
,您会发现其每一列都有字符串说明符所需的格式,即x的索引,x的值,y的索引和x的值y
tempCoord =
1.000000000000000 2.000000000000000 3.000000000000000 4.000000000000000 5.000000000000000
0.592000000000000 0.645100000000000 -0.120600000000000 0.241700000000000 0.302900000000000
1.000000000000000 2.000000000000000 3.000000000000000 4.000000000000000 5.000000000000000
0.463500000000000 0.211800000000000 -0.603600000000000 0.477300000000000 0.517200000000000
现在每一列成为打印文件的每一行,您将获得以下输出:
x1 0.5920 y1 0.4635
x2 0.6451 y2 0.2118
x3 -0.1206 y3 -0.6036
x4 0.2417 y4 0.4773
x5 0.3029 y5 0.5172