Created
May 15, 2019 18:01
-
-
Save MerlinTwi/e44f97d717a33d5b768d431131e8befa to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/// <summary> | |
/// Через сколько времени удастся перехватить равномерно двигающуюся цель, | |
/// если мы будем двигаться в место встречи со скоростью mySpeed | |
/// </summary> | |
/// <param name="targetPosition">текущее положение цели</param> | |
/// <param name="targetSpeed">вектор движения цели</param> | |
/// <param name="myPosition">наше текущее положение</param> | |
/// <param name="mySpeed">наша скорость движения</param> | |
/// <returns>через сколько времени встретимся. | |
/// Место встречи: targetPosition + targetSpeed*t</returns> | |
public static float InterceptTime(Vector2 targetPosition, Vector2 targetSpeed, | |
Vector2 myPosition, float mySpeed) { | |
var delta = targetPosition - myPosition; | |
var deltaSq = delta.sqrMagnitude; | |
var targetSpeedSq = targetSpeed.sqrMagnitude; | |
if (targetSpeedSq < 0.00001f) // цель практически не двигается | |
return Mathf.Sqrt(deltaSq)/mySpeed; | |
var dpv = Vector2.Dot(delta, targetSpeed); | |
var a = dpv * dpv - deltaSq * targetSpeedSq + deltaSq * mySpeed * mySpeed; | |
return (dpv + Mathf.Sqrt(a)) / (mySpeed * mySpeed - targetSpeedSq); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment