# Difference between revisions of "Maximum Escape Angle"

Line 32: | Line 32: | ||

[[Image:RobocodeMaximumEscapeAngle.jpg|center]] | [[Image:RobocodeMaximumEscapeAngle.jpg|center]] | ||

− | Notice that the triangle formed by assuming PI/2 as the lateral angle of our target fails to cover a small part of all places the target could go. For most cases, it's entirely negligible, as a curved path reduces the time it takes for the bullet to reach the target. But in the case of very specific firing strategies, the fault can become apparent, and the maximum escape angle must be redrawn | + | Notice that the triangle formed by assuming PI/2 as the lateral angle of our target fails to cover a small part of all places the target could go. For most cases, it's entirely negligible, as a curved path reduces the time it takes for the bullet to reach the target. But in the case of very specific firing strategies, the fault can become apparent, and the maximum escape angle must be redrawn. |

== See Also == | == See Also == |

## Revision as of 07:07, 23 March 2011

When firing, the Maximum Escape Angle (MEA) is the largest angle offset from zero (i.e., Head-On Targeting) that could possibly hit an enemy bot, given the Game Physics of Robocode.

## Calculation

Let's assume a triangle with sides `a`

, `b`

and `c`

and angles (vertices) `A`

, `B`

, and `C`

. `A`

is the angle opposite to `a`

, `B`

is opposite to b, and `C`

is opposite to `c`

. The Law of sines says that:

Now let's say that your bot is in the vertex `A`

and the enemy bot is in the vertex `C`

. We will fire a bullet with angle `A`

to hit the bot in vertex `B`

. We know the value of `b`

(it is the distance `D`

from your bot to the enemy).
We don't know `c`

, but we know that it will be the distance traveled by the bullet. Also, we know that `a`

will be the distance traveled by the enemy bot. If we put `a`

, `b`

, and `c`

as a function of time, we have:

b = D c = Vb * t (Vb is the bullet speed) a = Vr * t (Vr is the enemy bot velocity)

Now, using the Law of sines:

a/sin(A) = c/sin(C) -> Vr*t / sin(A) = Vb*t / sin(C) -> sin(A) = Vr/Vb * sin(C) -> A = asin(Vr/Vb * sin(C))

We don't know the value of `C`

, but we can take the worst scenario where
`C = PI/2`

(`sin(C) = 1`

) to get a Maximum Escape Angle of
`A = asin(Vr/Vb * 1) = asin (Vr/Vb)`

.

With a maximum Robot velocity of 8.0, a theoretical Maximum Escape Angle would be `asin(8.0/Vb)`

. Note that the actual maximum depends on the enemy's current heading, speed, and Wall Distance.

## Further Improvements

The above gives a solid estimate of the maximum escape angle, but in practice, it's slightly different.

Notice that the triangle formed by assuming PI/2 as the lateral angle of our target fails to cover a small part of all places the target could go. For most cases, it's entirely negligible, as a curved path reduces the time it takes for the bullet to reach the target. But in the case of very specific firing strategies, the fault can become apparent, and the maximum escape angle must be redrawn.

## See Also

- Maximum Escape Angle/Precise - Some bots use a more sophisticated calculation for Maximum Escape Angle, using Precise Prediction.