如何在代码中使用正弦定律

时间:2017-04-24 18:16:07

标签: java math libgdx box2d

我有一个关于根据对角线计算速度x和y的问题。三角形检查以下图纸

enter image description here

在这种情况下,我知道每个角落的所有角度,我知道它总是600.

我已经开始搜索并遇到了正弦定律,我想我应该使用它,但我无法弄清楚如何在Java中使用它。

非常感谢任何帮助。

这是我到目前为止所得到的

        Vector2 pos = mBall.getPosition();
    double angleA = Math.atan2(target.x - pos.x, target.y - pos.y) * 180.0d / Math.PI;
    double angleB = 90.0f;
    double angleC = 180f - (angleA + angleB);
    double sideA = MAXIMUM_VELOCITY;
    double lawofsines = sideA / Math.sin(Math.toRadians(angleA));

2 个答案:

答案 0 :(得分:1)

您使用atan2错误。调用约定以arcus正切的一个为模型,atan(dy/dx)

atan2(dy, dx)

但是从代码中可以看出,你不需要计算天使,因为目标的单位方向就足够了,

dx = target.x-pos.x
dy = target.y-pos.y

ds = Math.hypot(dx,dy)

vel.x = MAXIMUM_VELOCITY * (dx/ds)
vel.y = MAXIMUM_VELOCITY * (dy/ds)

答案 1 :(得分:0)

你不需要正弦法则。因为在普通坐标系中,X和Y尺寸根据定义是垂直的,所以您可以使用:

X = A*Cos(a) where a is the angle and A is the hypotenuse 
Y = A*Sin(a) 

这来自Right Triangle

的属性