2017-04-24 3 views
0

대각선을 기준으로 속도 x와 y를 계산하는 방법에 대한 질문이 있습니다. 삼각형의. 내가 각 모서리의 모든 각도를 알고 난이 알고 그것이 내가 검색을 시작했습니다 항상 600코드에서 사인 법칙을 사용하는 법

과 사인의 법 우연히이 경우 다음 그리기

enter image description here

확인 내가 이것을 사용해야한다고 생각하지만 자바에서 사용하는 방법을 알 수는 없다.

도움을 주시면 대단히 감사하겠습니다.

이것은 내가 지금까지

 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

현재 문제가 명확하지 않기 때문에 문제를보다 잘 정의해야합니다. 인풋이 무엇인지, 그리고 예상되는 아웃풋이 무엇인지 간단하게 기술하십시오. 자바 코드도, 사인 법도 없음 ... 바로 지금, x, y 좌표에서 각도를 계산하고, 해당 각도에서 그 좌표를 계산하려고합니다. –

답변

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) 
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가 원하는 것을 솔직히 모른다. –