2016-09-18 3 views
1

나는 주어진 속도와 던져진 후에 점령되어야 할 지점에 대해 그 방향으로 공을 통과하는 각도를 계산해야합니다.주어진 시점에서 물체가 3 차원에서 투영 각도를 계산하는 방법은 무엇입니까?

수평각은 쉽습니다 (시작점과 단계 점 모두를 알고 있습니다.) 투영의 수직 각도를 계산하는 방법. 물체에 그레이비가 적용됩니다.

볼 시간 (볼 방출과 발생 단계 사이의 시간)은 비디오 당 이동 시간이 보통입니다.

unity3d에서 직접적인 방법이 있습니까?

시계 8 초 동안 비디오를 보면서이 질문을 명확하게 이해합니다. 로 계산됩니다 위키 백과 페이지 Trajectory of a projectile은 "손이 닿지 않는 각도"(당신이 알고 싶은 각도)에 따르면

답변

1

다음과

θ = 1/2 * 다 arcsin (GD/v²)

이 공식에서 g는 중력 상수 9.81이고, d는 발사체가 이동할 거리이고, v는 물체가 던져지는 속도입니다. 이 계산

코드는 다음과 같다 :

float ThrowAngle(Vector3 destination, float velocity) 
{ 
    const float g = 9.81f; 
    float distance = Vector3.Distance(transform.position, destination); 
    //assuming you want degrees, otherwise just drop the Rad2Deg. 
    return Mathf.Rad2Deg * (0.5f * Asin((g*distance)/Mathf.Pow(velocity, 2f))); 
} 

이 당신에게 당신의 게임에 존재하는 등 공기 저항이 없다고 가정 각도를 제공 할 것입니다. 목적지와 "던지는 지점"이 같은 높이가 아닌 경우 먼저 y = 0으로 설정하고 그렇지 않으면 오류가 발생할 수 있습니다.

편집 : 당신의 발사 지점이 대상보다 최대 높다는 것을 고려

, 같은 페이지에서이 공식은 작동합니다 :

θ = 아크 탄젠트 (v² (+/-) √ (V^4-g (gx² + 2yv²))/gx)

여기에서 x는 범위 또는 거리이고 y는 고도입니다 (시작 지점과 관련 있음).

코드 :

float ThrowAngle(Vector3 start, Vector3 destination, float v) 
    { 
     const float g = 9.81f; 
     float xzd = Mathf.Sqrt(Mathf.Pow(destination.x - start.x, 2) + Mathf.Pow(destination.z - start.z, 2)); 
     float yd = destination.y - start.y; 
     //assuming you want degrees, otherwise just drop the Rad2Deg. Split into two lines for better readability. 
     float sqrt = (Mathf.Pow(v,4) - g * (g*Mathf.Pow(xzd,2) + 2*yd*Mathf.Pow(v,2))/g*xzd); 
     //you could also implement a solution which uses both values in some way, but I left that out for simplicity. 
     return Mathf.Atan(Mathf.Pow(v, 2) + sqrt); 
    } 
+0

없음 모두 같은 높이가 될 수 없습니다. 볼링 (볼 운동)과 같은 비디오에서 볼 수 있듯이 투영은 어느 정도 높이에서 시작되고 목적지는 지상에 있습니다. – djkp

+0

그 기사는 y = 0에서 시작하지 않는 던지기 부분과 y = 0 인 시작점 부분을 가지고 있습니다. (당신은 y = 0으로 낮은 지점을 취급 할 것입니다. = 0) 올바른 공식을 찾으려면 오른쪽에있는 그래픽을보십시오. –

+0

현재 답변을 작성 중입니다. 제발 좀주세요. –

관련 문제