【问题标题】:How to convert slope to degrees and vice versa?如何将斜率转换为度数,反之亦然?
【发布时间】:2013-02-13 17:22:30
【问题描述】:

我正在制作一个游戏,其中你有一个向鼠标方向发射子弹的精灵。到目前为止,它适用于 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 斜率转换为度数,反之亦然。

提前致谢!

【问题讨论】:

    标签: java math degrees projectile


    【解决方案1】:

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

    这是Math 类上的Javadocs

    【讨论】:

    • Math.tan() 返回一个双精度值,对吗?如何将其转换为 X 和 Y?
    • 如果您需要将其转换为 X 和 Y,而不是使用 Math.tan,请使用 Math.cos(adjustedRadians) 获取 X 值并使用 Math.sin(adjustedRadians) 获取一个 Y 值,它将为您提供一个归一化向量的 (X, Y)。
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

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

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

      【讨论】:

        猜你喜欢
        • 2019-03-01
        • 2011-07-27
        • 2021-06-10
        • 2012-03-24
        • 2018-06-28
        • 2010-12-04
        • 2012-01-15
        • 1970-01-01
        相关资源
        最近更新 更多