速度计算算法



这可能是一道非常愚蠢的数学题,但我似乎想不通。我在a点有一个圆圈,我可以点击它并将鼠标从中拖动。当鼠标释放时,释放点B被视为目标点,球必须朝那个方向移动。我现在做的事情是这样的:

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

这使我可以使用不同的"射击"速度,鼠标从圆圈释放得越远。但现在我意识到我不喜欢这个想法,相反,我想用以下方式来做:

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

我知道这应该非常简单,但我(知道点A和B的坐标、最小值、最大值和选定的速度)如何在考虑拍摄方向的情况下将x和y速度设置为圆?

我可以想出两种方法。

假设从a到b的角度是T。那么:

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

知道T,就可以计算x和y速度:

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

这应该行得通。

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

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

我们可以使用勾股定理计算h:

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

由此我们可以导出Vx和Vy 的公式

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

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

这可能会更快,特别是如果你有一个勾股定理函数。

只需将从圆心到该点的向量归一化,然后乘以所需的速度。在任何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

最新更新