Java 如何计算对角线速度?

Java 如何计算对角线速度?,java,velocity,geometry,Java,Velocity,Geometry,我写了一个游戏来练习编程,我遇到了这个问题。在我的游戏中,屏幕上有圆圈。当用户点击屏幕时,圆圈应该远离点击。我得到了鼠标按钮被按下点的x和y位置,还有每个圆环对象的x和y位置 我用下面的代码找到了圆的中心 float cx = circle.getX()+circle.getRadius(); float cy = circle.getY()+circle.getRadius(); 为了找到从圆圈边缘到鼠标点击的距离,我这样做了 float distance = (float) Math.sq

我写了一个游戏来练习编程,我遇到了这个问题。在我的游戏中,屏幕上有圆圈。当用户点击屏幕时,圆圈应该远离点击。我得到了鼠标按钮被按下点的x和y位置,还有每个圆环对象的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


编辑:实际上我想要加速,但我想都一样。

这听起来像是
sin
cos
java.lang.Math
中的工作

一旦知道了总速度(
1f
在上面的例子中)和角度(弧度),速度的水平分量是
v*cos(角度)
,垂直分量是
v*sin(角度)

如果你想移动它,你可能需要抵消这个角度

要计算水平和垂直距离的角度,请使用
atan2


顺便说一句,如果你不想取不必要的平方根,并且想避免像三角函数那样计算级数的成本,请看。

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

您可以按照Mike的建议首先找到角度,并使用cos和sin函数

或使用:

velHoriz = velocity * (cx-x) / distance

velVert = velocity * (cy-y) / distance

好的,我喜欢这个思路,但我仍然不知道如何将矢量分解为x和y速度。角度通常是从水平轴定义的。那么水平分量应该是
v*cos(角度)
,垂直分量应该是
v*sin(角度)
这对我很有效,谢谢!然而,我很好奇如何使用有理三角学来做到这一点。你能用x或y乘以排列,用另一个方向乘以(排列-1)吗?我相信这是正确的。这将为您提供组件沿该尺寸的四边形。