3

我正在制作一个游戏,其中你有一个向鼠标方向发射子弹的精灵。到目前为止,它适用于 1 个子弹。我有这个方法可以得到一个斜率,然后对向量进行归一化:

    public static Vector2f getSimplifiedSlope(Vector2f v1, Vector2f v2) {
    Vector2f result = new Vector2f(v2.x - v1.x, v2.y - v1.y);
    float length = (float)Math.sqrt(result.x * result.x + result.y * result.y);

    return new Vector2f(result.x / length, result.y / length);
}

但是,现在我正在制作一把可以发射几发子弹的霰弹枪,并带有“扩散”。我的计划是,我将取基本斜率,将其转换为度数,添加或减去一对以创建偏差,然后将度数转换回斜率,并将其传递给子弹。

但是,我不知道该怎么做。如果有人能告诉我如何将 2D 斜率转换为度数,那就太好了,反之亦然。

提前致谢!

4

3 回答 3

4

最简单的方法是使用三角法Math.atan2计算以弧度为单位的角度,使用 将其转换为度数Math.toDegrees,执行调整,使用 将其转换回弧度Math.toRadians,然后使用三角法Math.tan将弧度值转换回斜率。您需要注意从该tan方法返回的潜在无限斜率。

这是该类的Javadocs 。Math

于 2013-02-13T17:26:16.790 回答
0

Math.atan2()将执行此操作并以弧度为您提供结果。

从直角坐标 (x, y) 到极坐标 (r, theta) 的转换中返回角度 theta。此方法通过计算 -pi 到 pi 范围内的 y/x 的反正切来计算相位 theta。

Math.toDegrees()将执行您的弧度/度数转换。

于 2013-02-13T17:24:58.540 回答
0

使用Math.atan2(),并记住结果是弧度,而不是度数

于 2013-02-13T17:24:08.840 回答