다음과
θ = 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);
}
없음 모두 같은 높이가 될 수 없습니다. 볼링 (볼 운동)과 같은 비디오에서 볼 수 있듯이 투영은 어느 정도 높이에서 시작되고 목적지는 지상에 있습니다. – djkp
그 기사는 y = 0에서 시작하지 않는 던지기 부분과 y = 0 인 시작점 부분을 가지고 있습니다. (당신은 y = 0으로 낮은 지점을 취급 할 것입니다. = 0) 올바른 공식을 찾으려면 오른쪽에있는 그래픽을보십시오. –
현재 답변을 작성 중입니다. 제발 좀주세요. –