2011-06-23 180 views
1

这可能是一个非常愚蠢的数学问题,但我似乎无法弄清楚。我所拥有的是在A点的一个圆圈,我可以点击并从中拖拽鼠标。释放鼠标时 - 释放点B被认为是目标点,球必须沿该方向移动。我现在正在做的是这样的:速度计算算法

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

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

  • 有一个最小和最大速度(每个动画帧像素)
  • 从选择速度此间隔拍摄前
  • 只使用点B来简化定位。该出手速度被预选并should't取决于鼠标多远发布

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

回答

1

只需将从圆心到点的矢量标准化,然后乘以所需的速度即可。在任何好的矢量库中都有这样的功能,但只是为了阐明:

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 
+0

非常感谢你 - 作品像魅力! – Marius

2

我可以想到两种方法来做到这一点。

允许从A到B说的角度为T.然后:

T等于ATAN((由-AY)/(BX-AX))

知道T优可以计算在x和y速度:

Vx的= COS(T)V VY = SIN(T)V

这应该工作。

为了让事情更快,您可以直接计算cos(T)和sin(T)。 sin(T)给出比例y/h,其中h是a与b之间的直线长度。

我们可以利用勾股定理计算H:

H = SQRT((由-AY)^ 2 +(BX-AX)^ 2)

从这我们可以推导出公式Vx和VY

Vx的= V *(BX-AX)/ SQRT((由-AY)^ 2 +(BX-AX)^ 2)

VY = V *(BX-AX)/ SQRT(( by-ay)^ 2 +(bx-ax)^ 2)

这可能会更快,partic如果你有一个内置的毕达哥拉斯定理函数。

+0

谢谢你的解释 – Marius