在MATLAB

时间:2015-04-29 14:33:16

标签: matlab file-io matrix

所以我试图在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)

1 个答案:

答案 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