事件:
r = 600;
n = 17;% 17paragraph
p = [0 -321.79725039 506.40549922];
allgamma = 2.00943006740867
pera = allgamma/(n-1);
f = 0.566081293090563;
for i = 1:n
angle(i) = f + pera*(i-1);
x(i) = p(1);
y(i) = - r * sin(angle(i));
z(i) = r * cos(angle(i));
pp(i) = [x(i),y(i),z(i)];
end
错误:
- 带有下标的赋值维度不匹配。
- 在赋值 A( : ) = B 中,A 和 B 中的元素数目必须相同
原因: p p ( i ) pp(i) pp(i)是存储 [ x ( i ) , y ( i ) , z ( i ) ] [x(i),y(i),z(i)] [x(i),y(i),z(i)]的第i个元素,matlab默认 p p ( i ) pp(i) pp(i)为一个数字,长度为1。因为在这段代码里 p p ( i ) pp(i) pp(i)的赋值是一个行向量,且 x , y , z x,y,z x,y,z的组合各有17组,这就会使得等号左右的元素数目不同。因此 p p pp pp应该设置为一个矩阵,矩阵第一行存储 i = 1 i=1 i=1的结果,第 n n n行存储 i = n i=n i=n的结果。
解决方法:
将 p p ( i ) pp(i) pp(i)这种数字的形式改为矩阵的形式,即 p p ( i , : ) pp(i,:) pp(i,:)
r = 600;
n = 17;% 17paragraph
p = [0 -321.79725039 506.40549922];
allgamma = 2.00943006740867
pera = allgamma/(n-1);
f = 0.566081293090563;
for i = 1:n
angle(i) = f + pera*(i-1);
x(i) = p(1);
y(i) = - r * sin(angle(i));
z(i) = r * cos(angle(i));
pp(i,:) = [x(i),y(i),z(i)];
end