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 next pathX = 0:0.1:1....pathY = 1:0.1:1... 等等

4

1 回答 1

3

如果你这样做

start:increment:end

其中start == end,你会得到一个等于的标量start(这是合乎逻辑的)。

如果您希望每次迭代pathXpathY具有相同的长度,则必须这样做:

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 中以备后用。如果您想要一个大数组中的所有内容,请将其添加到循环的末尾:

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