所以我试图在MATLAB中组织一个.txt文件。该文件包含一些三角形的宽度和高度(第一个值除外,它是三角形的数量)。组织数字使得第二个值是宽度,第三个值是三角形1的高度,第四个值是宽度,第五个值是三角形2的高度,依此类推。该文件就像这样开始。
112
5
0.2
1 3
1 2 3 5
54 8
81.4724 16.2182
..........................
所以我的问题是。如何让MATLAB读取此文件,仅从第二个值开始,然后将其组织成一个(在这种情况下为112 x2)矩阵?另外,我是否需要指定它如何组织数据?因为我需要它来填充第一行然后第二行等。
到目前为止我已经
了TriagnleArea = struct(width, height, area)
area = 0.5*width*height
FileID = fopen('SampleText','r')
A = fscanf('SampleText',%f)
答案 0 :(得分:0)
你几乎是正确的。当您使用fopen
时,您需要指定FileID
,以确定您打开文件的位置的访问点。您正在指定文件名,这是不正确的。
接下来,您可以简单地将所有值读取到一个单独的数组中,提取出第一个元素以获得所需的三角形数量,然后拉出其余的值。之后,使用reshape
将数组重组为您想要的2D矩阵。
%// Open up file for reading
FileID = fopen('SampleText', 'r');
%// Read all values into a single array
A = fscanf(FileID, '%f');
%// Close the file
fclose(FileID);
%// Pull out total number of triangles
numTriangles = A(1);
%// Look at the rest of the points and reshape them
%// into a N x 2 array
values = reshape(A(2:end), 2, numTriangles).';
这是给出文本文件的示例。在这里,您只指定了12个值,因此只有6个三角形。因此,我制作了一个如下文本文件:
6
5 .2
1 3
1 2
3 5
54 8
81.4724 16.2182
如果我们将上述内容放入一个名为SampleText
的文件中,这就是我得到的三角形数量以及各自的宽度和高度:
>> numTriangles
numTriangles =
6
>> values
values =
5.0000 0.2000
1.0000 3.0000
1.0000 2.0000
3.0000 5.0000
54.0000 8.0000
81.4724 16.2182
然后,您可以使用宽度和高度除以2的乘积计算每个三角形的面积:
>> areas = values(:,1).*values(:,2)/2
areas =
0.5000
1.5000
1.0000
7.5000
216.0000
660.6678