# Difference between revisions of "Maximum Escape Angle"

RobertWalker (talk | contribs) (Created law of sines graphic) |
|||

Line 5: | Line 5: | ||

Let's assume a triangle with sides <code>a</code>, <code>b</code> and <code>c</code> and angles (vertices) <code>A</code>, <code>B</code>, and <code>C</code>. <code>A</code> is the angle opposite to <code>a</code>, <code>B</code> is opposite to b, and <code>C</code> is opposite to <code>c</code>. The [http://en.wikipedia.org/wiki/Law_of_sines Law of sines] says that: | Let's assume a triangle with sides <code>a</code>, <code>b</code> and <code>c</code> and angles (vertices) <code>A</code>, <code>B</code>, and <code>C</code>. <code>A</code> is the angle opposite to <code>a</code>, <code>B</code> is opposite to b, and <code>C</code> is opposite to <code>c</code>. The [http://en.wikipedia.org/wiki/Law_of_sines Law of sines] says that: | ||

− | + | [[Image:LawOfSines.png|center]] | |

− | |||

− | |||

− | |||

− | |||

− | |||

− | |||

− | |||

− | |||

− | |||

− | |||

Now let's say that your bot is in the vertex <code>A</code> and the enemy bot is in the vertex <code>C</code>. We will fire a bullet with angle <code>A</code> to hit the bot in vertex <code>B</code>. We know the value of <code>b</code> (it is the distance <code>D</code> from your bot to the enemy). | Now let's say that your bot is in the vertex <code>A</code> and the enemy bot is in the vertex <code>C</code>. We will fire a bullet with angle <code>A</code> to hit the bot in vertex <code>B</code>. We know the value of <code>b</code> (it is the distance <code>D</code> from your bot to the enemy). |

## Revision as of 19:46, 12 December 2007

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.

## See Also

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