我有一个数组:
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 ......等等
答案 0 :(得分: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
- 数组中以供日后使用。如果你想要一个大数组中的所有内容,请将其添加到循环的末尾:
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));