你如何计算对角线速度?

时间:2011-03-15 00:46:47

标签: java velocity geometry

我正在编写各种游戏来练习编程,我遇到过这个问题。在我的游戏中,屏幕上有圆圈。当用户点击屏幕时,圆圈应远离点击。我有按下鼠标按钮的点的x和y位置,我有每个cicle对象的x和y位置。

我找到了圆圈的中心,其中包含以下代码

float cx = circle.getX()+circle.getRadius();
float cy = circle.getY()+circle.getRadius();

为了找到从圆边到鼠标点击的距离,我做了这个

float distance = (float) Math.sqrt( ((cx-x)*(cx-x)) + ((cy-y)*(cy-y)) ) - circle.getRadius();

现在,在检查圆是否足够接近点击后,如何将1f的速度分割为圆的变量vx和vy?

编辑:其实我想要加速,但我猜它都是一样的。

3 个答案:

答案 0 :(得分:5)

这听起来像是sin中的cosjava.lang.Math http://download.oracle.com/javase/6/docs/api/java/lang/Math.html的作业。

知道总速度(上例中的1f)和角度(弧度)后,速度的水平分量为v * cos(angle),垂直分量为{{1} }。

如果你想将它移开,你可能需要否定角度。

要计算水平和垂直距离的角度,请使用v * sin(angle)

顺便说一句,如果你不想采取不必要的平方根,并希望避免计算三联系函数的计算系列成本,请查看http://www.youtube.com/user/njwildberger#p/u/368/9wd0i44vK04

答案 1 :(得分:1)

找到从鼠标到圆心的线,这应该是“力”向量。这个向量将为您提供方向,现在您只需要弄清楚距离如何影响幅度。

答案 2 :(得分:0)

你可以先找到迈克建议的角度并使用cos和sin函数。

或使用:

velHoriz = velocity * (cx-x) / distance

velVert = velocity * (cy-y) / distance