速度计算算法

时间:2011-06-23 15:15:39

标签: math geometry

这可能是一个非常愚蠢的数学问题,但我似乎无法弄明白。我所拥有的是A点的一个圆圈,我可以点击它并从中拖动鼠标。释放鼠标时 - 释放点B被视为目标点,球必须朝该方向移动。我现在正在做的是这样的事情:

velocityX = (b.x - a.x) / somenumber
velocityY = (b.y - a.y) / somenumber

这允许我使用不同的“镜头”速度,鼠标从圆圈中释放得越远。但现在我意识到我不喜欢这个想法,而是我想用以下方式做到这一点:

  • 具有最小和最大速度(每个动画帧的像素数)
  • 从拍摄前的这个间隔中选择速度
  • 使用B点只是为了更容易定位。镜头速度是预选的,不应该取决于鼠标的释放距离

我知道它应该很简单,但是我如何(知道A点和B点坐标,最小值,最大值和选定的速度)将x和y的速度设置为考虑到镜头方向的圆圈?

2 个答案:

答案 0 :(得分:2)

我可以想到两种方法。

让我们说从a到b的角度是T.然后:

T等于atan((b.y-a.y)/(b.x-a.x))

知道你可以计算x和y的速度:

Vx = cos(T)V Vy = sin(T)V

这应该有效。

为了使事情更快,你可以直接计算cos(T)和sin(T)。

sin(T)给出比例y / h,其中h是a和b之间的线的长度。

我们可以用毕达哥拉斯定理计算h:

h = sqrt((b.y-a.y)^ 2 +(b.x-a.x)^ 2)

从这里我们可以推导出Vx和Vy的公式

Vx = V *(b.x-a.x)/ sqrt((b.y-a.y)^ 2 +(b.x-a.x)^ 2)

Vy = V *(b.x-a.x)/ sqrt((b.y-a.y)^ 2 +(b.x-a.x)^ 2)

这可能会更快,特别是如果你有一个建立的毕达哥拉斯定理函数。

答案 1 :(得分:1)

只需将矢量从圆心到该点进行归一化,然后乘以您想要的速度。在任何goodl矢量库中都有这样的功能,但只是为了澄清:

length=square_root((b.x - a.x)^2+(b.y - a.y)^2)
velocityX = (b.x - a.x) / length * speed
velocityY = (b.y - a.y) / length * speed