计算循环中的向量长度

时间:2015-10-01 10:10:02

标签: matlab

代码用于在图中每次点击鼠标画一条线。这是我的代码;

b=1
while b>0;
    axis([-10, 10, -10, 10])
    b=b+1
    [x(b),y(b)]=ginput(1)  
    plot(x,y,x,y)
end

然而,我无法理解如何添加向量,因为有些是+而有些是 - ,我需要将负数转为正数。我需要添加代码,在所有鼠标点击后,它会给我一个总体组合长度。也许我只是在想它完全错了。 我试过了;

length=(sqrt(x.^2)+(y.^2))

我希望这会给我正确的向量长度接受,除非我点击一条确切的直线。

2 个答案:

答案 0 :(得分:1)

你的问题是双重的:有一个错字,我想而不是

length=(sqrt(x.^2)+(y.^2))
你的意思是

length=sqrt((x.^2)+(y.^2))

第二个问题是,这实际上并不计算你的路径长度,相反,你可能想要像

这样的东西
clear all
b=1;
radius = 3;
while b>0;
    axis([-10, 10, -10, 10])
    b=b+1;
    [x(b),y(b)]=ginput(1);  
    plot(x,y,x,y);
    length(b)=sqrt((x(b)-x(b-1))^2+(y(b)-y(b-1))^2);
    if sqrt(x(b)^2 + y(b)^2) < radius; break; end
end
sum(length)

计算您添加的每个新作品的长度并将它们全部加起来。 一旦你在“半径”距离0内点击,while循环就会中断。 此外,通常最好预先分配变量,这里没什么大不了的,导致你的数组很小,只是说。

注意: Dan的解决方案为您提供了一步计算总长度的矢量化方法,因此如果您不需要单独的路径长度,这将是更简洁的方法。< / p>

答案 1 :(得分:1)

因此假设xy是连续点的向量,如果你想获得总距离,那么你需要得到每个点之间距离的总和,即

Σ<子> I (SQRT((X <子> I -x <子> I-1 2 +(Y <子> I -y <子> I-1 2 ))

在Matlab中,我们可以使用x函数一步计算所有y(和diff)差异,最后得到

length = sum(sqrt(diff(x).^2 + diff(y).^2))