如何在Java中find另一个单位向量?

我正在编写基于本教程的Java公式: 没有三角函数的二维弹性碰撞 。 我在“两维弹性碰撞”部分 。 步骤1的一部分说:

接下来,findn的单位vector,我们称之为un。 这是通过除以n的大小来完成的。

我下面的代码表示2个对象的法向量(我用一个简单的数组来表示法向量)。

int[] normal = new int[2]; normal[0] = ball2.x - ball1.x; normal[1] = ball2.y - ball1.y; 

我不确定教程的意思是把n的大小除以得到un

什么是联合国 ? 我怎样才能用我的Java数组来计算它?

首先,使用数组并不是用Java表示Vector信息的最佳方法。 其次,使用浮游物。 看看LibGDX Vector2类 。

vector的大小是它的长度,可以用毕达哥拉斯定理得到:

 a² = b² + c² 

在你的情况下,你可以通过以下方式获得它:

 float[] normal = new float[2]; normal[0] = ball2.x - ball1.x; normal[1] = ball2.y - ball1.y; float magnitude = (float)Math.Sqrt(normal[0]*normal[0] + normal[1] * normal[1]); float[] un = new float[2]; un[0] = normal[0] / magnitude; un[1] = normal[1] / magnitude; 

让我向你保证,使用arrays是不好的。 有了正确的Vector类,它应该是这样的:

 Vector2 normal = new Vector2(); normal.set(ball2); normal.sub(ball1); Vector2 un = new Vector2(); un.set(normal); un.normalize(); 

如果您要使用可能导致操作员超载的语言:

 Vector2 normal = ball2 - ball1; Vector2 un = normal / normal.length();