2013-02-13 363 views
2

我正在做一个游戏,你有一个精灵在鼠标方向射击子弹。到目前为止,它工作正常,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); 
} 

不过,现在我正在做一个触发几颗子弹猎枪,与“扩张”。我的计划是,我将采用基准斜率,将其转换为度数,添加或减去一对夫妇以创建偏差,然后将度数转换回斜率,并将其传递给子弹。

但是,我不知道该怎么做。如果有人能告诉我如何将二维斜率转换为度数,反之亦然,那将会很棒。

在此先感谢!

+2

SOHCAHTOA,宝贝! – 2013-02-13 17:23:59

回答

3

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

以下是Math类中的Javadocs

+0

'Math.tan()'返回一个double,对吗?我如何将它转换为X和Y? – user2029675 2013-02-13 17:32:48

+0

如果您需要将其转换为X和Y,而不是使用Math.tan,请使用Math.cos(adjustedRadians)获取X值,然后使用Math.sin(adjustedRadians)获取Y值,该值将给出你一个(X,Y)为一个归一化的向量。 – rgettman 2013-02-13 17:36:17

+0

看起来像它的作品!非常感谢! – user2029675 2013-02-13 17:41:11

0

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

0

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

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

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

相关问题