我正在使用matlab处理一个项目,而且我在这部分代码中遇到了问题。
在最后的for循环中,我无法创建一个数组,用于存储' distanza' .....作为输出程序覆盖找到的最后一个值的数组,或者它表示数组只有一个值。 我需要这些值,然后制作媒体。
C(f2)= numel (featPairs);
C1(f1)= numel (featPairs);
[bestval,bestidx] = max (C);
[bestval1,bestidx1] = max (C1);
a = importdata('coordData.mat');
x = interp1( a(:,1), a(:,2), 1:frames2);
y = interp1( a(:,1), a(:,3), 1:frames2);
b = importdata('coordData2.mat');
x1 = interp1( b(:,1), b(:,2), 1:frames1);
y1 = interp1( b(:,1), b(:,3), 1:frames1);
distanza=[];
dist= [];
if max(C)==bestval
disp ([x(bestidx),y(bestidx)]);
disp ([x1(bestidx1),y1(bestidx1) ]);
for i=1:10
distanza = sqrt ((x(bestidx)-x1(bestidx1))^2 + (y(bestidx)-y1(bestidx1))^2);
dist = [dist; distanza(i)];
end
save ('distance_sample.mat','dist');
disp (['la distanza tra le due posizioni è: ', num2str(distanza)]);
提前感谢!
答案 0 :(得分:0)
让我们走过代码:
C(f2)= numel (featPairs);
C1(f1)= numel (featPairs);
假设featPairs
存在且C
和C1
不存在,您只需创建一个零向量,它将在两个不同的位置覆盖相同(正)值f1
和f2
。
[bestval,bestidx] = max (C);
[bestval1,bestidx1] = max (C1);
这将bestidx
f1
的值(即正元素f1
的位置)和bestidx1
f2
的值{ / p>
a = importdata('coordData.mat');
x = interp1( a(:,1), a(:,2), 1:frames2);
y = interp1( a(:,1), a(:,3), 1:frames2);
b = importdata('coordData2.mat');
x1 = interp1( b(:,1), b(:,2), 1:frames1);
y1 = interp1( b(:,1), b(:,3), 1:frames1);
好的,你加载并切片并处理一些数据。
distanza=[];
dist= [];
您创建/清除distanza
和dist
为空矩阵。
if max(C)==bestval
这将永远是真实的;请查看您如何定义bestval
。最好删除它,它没有用处。
disp ([x(bestidx),y(bestidx)]);
disp ([x1(bestidx1),y1(bestidx1) ]);
好的,还有一些展示。
for i=1:10
对于从1到10的每个i ......
distanza = sqrt ((x(bestidx)-x1(bestidx1))^2 + (y(bestidx)-y1(bestidx1))^2);
...将distanza
重写为标量(欧氏距离)。我在这里强调,标量与1x1矩阵一样。现在,因为右侧不依赖于i
,它会一遍又一遍地计算相同的值,并且我强调相同的值。
dist = [dist; distanza(i)];
...附加在dist
标量i
的第distanza
个元素的右侧。现在,当i
为1时,这是可以的,但对于其余的值,您将超出界限(错误)。
end
... for循环结束。
save ('distance_sample.mat','dist');
disp (['la distanza tra le due posizioni è: ', num2str(distanza)]);
更多保存和显示。
在我看来,你应该首先向自己说明你想要计算什么,因为代码似乎有点混乱。现在,尝试rubberducking;这个对我有用。希望它也适合你。 : - )