我试图根据X和Y坐标的矢量计算物体的速度。最初,我使用了两个分量速度,然后使用毕达哥拉斯定理将它们加在一起。 mdcx
和mdcy
分别是x和y坐标的向量。
for i=2:length(mdcx)
xdif(i)=mdcx(i-1)-mdcx(i);
end
xvel=(xdif/(1/60));
for i=2:length(mdcy)
ydif(i)=mdcy(i-1)-mdcy(i);
end
yvel=(ydif/(1/60));
v=hypot(xvel,yvel);
一位朋友提到这是多么愚蠢,我意识到有更好的方法:
d = hypot(mdcx,mdcy);
for i = 2:length(d)
v(i,1) = d(i)-d(i-1);
end
v = v/(1/60);
这一切都很好,除了两种方法得到不同的答案,我无法弄清楚为什么。方法编号的结果示例。 1是:
和方法编号的等效部分。 2:
我的问题
我在这里做错了什么?为什么这些结果不一样?这可能是一个愚蠢的错误,但我似乎无法弄清楚它的来源。我正确使用hypot
吗?
提前致谢!
答案 0 :(得分:5)
正确的方法是第一个。 Velocity是向量,因此您必须计算其 x , y 组件,然后然后获取其大小矢量。
使用第二种方法,你减去距离的大小,这是不正确的。例如,围绕坐标原点的圆周运动会给你零速度,这是错误的。
总结一下:你正在处理向量。执行向量减法,并且只在结束时采用幅度。 差异的大小与大小的差异不一样。
顺便说一句,您可以使用diff
矢量化第一个方法(注意,这不会像您的方法那样在结果中给出初始值为零):
v = hypot(diff(mdcx), diff(mdcy))*60;
答案 1 :(得分:1)
在第一种情况下,您计算位置段差异的长度。在第二种情况下,你要计算位置“长度”的差异。
换句话说,如果您获得3分A
,B
和C
,则第一种方法会计算AB
长度与长度的差异BC
。但是,第二种方法计算A
,B
和C
的长度差异。
第一种方法是正确的;第二种方法是使用位置的“长度”,这实际上不是一个有效/有用的数字。