2017-04-24 63 views
0

我有一个问题涉及基于对角线计算速度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)); 
+1

正弦值≤1。_B_的长度≤_A的长度。很显然'B = A * sin(a)'和'C = A * sin(c)';注意到_c =90º - a_,也是'C = A * cos(a)'。 – 9000

+1

@ 9000:在“清楚”之后编写公式后,您应该非常小心。 –

+0

您需要更好地定义您的问题,因为目前尚不清楚。请只说明输入是什么,以及预期的输出是什么。没有Java代码,没有正弦规律,......现在,你从'x,y'坐标计算一个角度,并且你尝试从相应的角度计算这些坐标。 –

回答

1

您正在使用atan2错误。调用约定是一个用于反正切后蓝本,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) 
0

你不需要正弦定理。因为在正常的坐标系中的X和Y尺寸被定义垂直你可以使用:

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

这是来自一个Right Triangle的属性。

+0

问题是:“X”和“Y”已知。我真的不知道OP想要什么。 –