代码用于在图中每次点击鼠标画一条线。这是我的代码;
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))
我希望这会给我正确的向量长度接受,除非我点击一条确切的直线。
答案 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)
因此假设x
和y
是连续点的向量,如果你想获得总距离,那么你需要得到每个点之间距离的总和,即
Σ<子> 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))