1

私は配列を持っています:

step1 = [0,0;
         0,1;
         1,1;
         2,3;
         3,4;
         3,5;
         3,6;
         3,7;
         4,7;
         5,7;
         6,7;
         6,6;
         6,5;
         6,4;
         6,3;
         6,2;
         5,1];

この配列をステップ実行して、行ごとに 0.1 ずつ増加する行と列の新しい配列を作成したいと考えています。これは私がしたことです:

z=1;
u=length(step1);
step_b4X = zeros(u,1);
step_b4Y = zeros(u,1);
while z <= length(step1)
    step_b4X = step_presentX;
    step_presentX(z,1) = step1(z,1);
    step_b4Y = step_presentX;
    step_presentY(z,1) = step1(z,2);
    pathX = step_b4X:0.1:step_presentX;
    pathY = step_b4Y:0.1:step_presentY;
    z = z+1;
end

私はゼロを取得します。pathX = 0:0.1:0....pathY = 0:0.1:1 次の pathX = 0:0.1:1....pathY = 1:0.1:1... など

4

1 に答える 1

3

もしあなたがそうするなら

start:increment:end

どこでstart == end、スカラーが得られますstart(これは論理的です)。

pathX各反復で同じ長さを希望pathYする場合は、次のようにする必要があります。

z = 1;
while z <= length(step1)

    currentX = step(z,1);   nextX = step(z+1,1);
    currentY = step(z,2);   nextY = step(z+1,2);

    pathX = currentX : 0.1 : nextX;
    pathY = currentY : 0.1 : nextY;

    if numel(pathX) == 1
        pathX = repmat(pathX, numel(pathY),1); end
    if numel(pathY) == 1
        pathY = repmat(pathY, numel(pathX),1); end

    z = z+1;
end

これで、反復ごとに適切な配列が得られます。これを直接使用するか、後で使用するためにcell-array に保存します。すべてを 1 つの大きな配列にまとめたい場合は、これをループの最後に追加します。

    pathX_final = [pathX_final; pathX];
    pathY_final = [pathY_final; pathY];

もちろん、ループの前にそれらを空として初期化します。

別の方法として (はるかにクリーンで、おそらく少し高速です)、ループ全体を捨てて次を使用しますinterp1

x = step1(:,1);
y = step1(:,2);

xx = interp1(1:numel(x), x, 1:0.1:numel(x));
yy = interp1(1:numel(y), y, 1:0.1:numel(y));
于 2012-12-13T07:13:15.053 に答える