1

MATLAB では、頂点 (x,y) を含むポリラインのリストをコンテナーに保持したいと考えており、このタスクにはセル配列を使用するのが最善の方法だと思いました。各行はセル配列の行で表され、頂点 (x,y) がセルの要素になります。異なる行は異なる長さになるため、セル配列を使用することをお勧めします。

しかし、私の問題は、セル配列の各行の最初の空でない要素に追加する方法がわからないことです。

次に例を示します。

cell{1,1} = 1
cell{2,1} = 2
cell{3,1} = 3
cell{2,2} = 4
cell{2,3} = 5

cell =

    [1]     []     []
    [2]    [4]    [5]
    [3]     []     []

たとえば、行 1 の末尾に新しい要素を追加し、行 2 に別の要素を追加したいとします。新しい要素を追加できる最初の位置を知るにはどうすればよいですか?

またはシェルは、このタスクのためにセル配列内でセル配列を使用しますか?

ポリライン MATLAB のリストのコンテナーをどのように実装しますか?

4

2 に答える 2

0

これは、あなたが遭遇しているまさにその問題のために、あなたのデータを保存するための悪い方法です. いくつかのメモ:

  1. 最初の列はインデックスとして使用されます (つまり、ポリライン 1 の場合は 1、ポリライン 2 の場合は 2 など)。これは、その情報がデータの構造に暗黙的に格納されているため不要です。
  2. この方法では、ポイントを隣り合わせに積み重ねる必要があり、これは索引付けにとって悪夢となります。
  3. x と y がそれぞれ別のセルにあると、1 つの点でもプロット/保存するのに不必要な手間がかかります。

このすべての情報を保存するには、2 つの良い方法があります。

  1. セル配列: Clement が指摘したように、これは素晴らしくシンプルで、2 番目の次元に沿って同じポリラインに異なるポイントを積み重ねることができます。

    celldata = {[] [4 5] []};
    celldata{2} = [celldata{2}; 1 1];
    celldata{3} = [0.5 0.5];
    
    >> celldata
    
    celldata = 
    
         []    [2x2 double]    [1x2 double]
    
  2. 構造体配列: これは、ポイントと共にポリライン レベルのメタデータを保存する場合に適した方法です。

    strucdata = struct('points', {[] [4 5] []}, 'info', {'blah', 'blah', 'blah'});
    strucdata(2).points = [strucdata(2).points; 1 1];
    strucdata(3).points = [0.5 0.5];
    
    >> strucdata
    
    strucdata = 
    
    1x3 struct array with fields:
        points
        info
    
    >> strucdata(2)
    
    ans = 
    
        points: [2x2 double]
          info: 'blah'
    
于 2011-11-03T17:11:30.717 に答える
0

最初の質問に答えるには、これを使用できます。

n=1;
length([cell{n,:}])+1
n=2;
length([cell{n,:}])+1

セル スライスを[...]複数のスカラー値ではなく、配列として扱います。

于 2011-11-03T08:22:25.070 に答える