1

我正在尝试根据其 X 和 Y 坐标的向量来计算对象的速度。最初,我使用了两个分量速度,然后使用勾股定理将它们加在一起。mdcxmdcy分别是 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个是:

  • 3.39676316513232
  • 1.69387130561921
  • 1.21490740387897
  • 1.40071410359145
  • 0.702281994643187
  • 1.02703456611744
  • 0.933380951166206

以及方法号中的等效部分。2:

  • 3.00324976888577
  • 1.41904819171419
  • 0.473028796076438
  • 0.772429851826608
  • 0.126083801997687
  • 1.02574816428026
  • 0.541889676174012

我的问题

我在这里做错了什么?为什么这些没有得出相同的结果?这可能是一个愚蠢的错误,但我似乎无法弄清楚它来自哪里。我使用hypot正确吗?

提前致谢!

4

2 回答 2

5

正确的方法是第一种。速度是一个向量,所以你必须计算它的xy分量,然后 获得该向量的大小。

使用第二种方法,您正在减去距离的大小,这是不正确的。例如,围绕坐标原点的圆周运动会给你零速度,这是错误的。

总结一下:您正在处理向量。做向量减法,只有在最后才取大小。差异的大小与大小的差异不同

顺便说一句,您可以使用以下方法对第一种方法进行矢量化diff(请注意,这不会像您的方法那样在结果中给出初始零):

v = hypot(diff(mdcx), diff(mdcy))*60;
于 2014-07-28T15:51:02.163 回答
1

在第一种情况下,您正在计算位置段差异的长度。在第二个中,您正在计算位置“长度”的差异。

换句话说,如果给您 3 个点ABC,第一种方法计算 的长度AB和 的长度之差BC。然而,第二种方法计算 、 和 的A长度BC

第一种方法是正确的;第二种方法是使用位置的“长度”,这不是一个有效/有用的数字。

于 2014-07-28T15:52:18.997 回答