这可能是一个非常愚蠢的数学问题,但我似乎无法弄明白。我所拥有的是A点的一个圆圈,我可以点击它并从中拖动鼠标。释放鼠标时 - 释放点B被视为目标点,球必须朝该方向移动。我现在正在做的是这样的事情:
velocityX = (b.x - a.x) / somenumber
velocityY = (b.y - a.y) / somenumber
这允许我使用不同的“镜头”速度,鼠标从圆圈中释放得越远。但现在我意识到我不喜欢这个想法,而是我想用以下方式做到这一点:
我知道它应该很简单,但是我如何(知道A点和B点坐标,最小值,最大值和选定的速度)将x和y的速度设置为考虑到镜头方向的圆圈?
答案 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