User talk:Xor/Better MEA formula

From Robowiki
Jump to navigation Jump to search


Thread titleRepliesLast modified
Tradiotional MEA proof910:42, 28 September 2017
Why is it better?217:34, 19 September 2017

Tradiotional MEA proof

I came up with a proof for traiotional MEA which fits on a margin :)

First of all we notice that even the slowest bullet is faster than a bot at full speed. Thus any bullet eventually hits a bot. Now we assume that both the bot and the bullet are spherical points and move in vacuum :), also that there are no walls. We also assume that the bot can reach maximum speed instantaneously.

Let's put the firing bot in the origin and the target somewhere on the right of the x axis (no y displacement). Now we notice that in order to hit the bot, the bullet must have exactly the same y projection of the speed as the target bot.

Vbullet_y = sin(theta)*V_bullet = Vbot_y

Sin V_bullet is fixed in a given situation, the maximum theta (MEA) will be when Vbot_y is maximized, i.e. V_bot_y = V_bot. Substituting it above, we obtain traditional formula

MEA = asin( Vbot/Vbullet )
Beaming (talk)03:47, 25 September 2017

excellent proof! I traped myself in polar coordination and forgot the most important cartesian coordinates;)

Xor (talk)05:09, 25 September 2017

I really like this proof!

There is another that you can do, with calculus, so find the escape angle that maximises theta. But that one is more complicated =)

Skilgannon (talk)06:51, 25 September 2017

Anyway, the less assumptions you made, the better ;) Do not assume constant speed & direction — use integral instead.

Assume the firing robot sits at the origin, and the target robot sits on the positive x-axis.

Since when hit, <math>y_{bullet} = y_{robot}</math>, we have

<math>\int_{0}^{t_1} v_{bullet} sin(\theta) dt = \int_{0}^{t_1} v_{robot} cos(\alpha) dt</math> where <math>\theta</math> is escape angle, <math>\alpha</math> is retreat angle (the heading of the target robot relating to the y-axis, the direction from y-axis to x-axis is positive).

Since <math>v_{bullet}</math> and <math>\theta</math> is constant, we have

<math>v_{bullet} sin(\theta) t_1 = \int_{0}^{t_1} v_{robot} cos(\alpha) dt</math>

assume <math>v_{robot}</math> is always the max — 8, therefore constant, we have

<math>v_{bullet} sin(\theta) t_1 = v_{robot} \int_{0}^{t_1} cos(\alpha) dt</math>

let <math>\alpha_{0}, \alpha_{2}</math> s.t. <math>cos(\alpha_{0}) \leqslant cos(\alpha) \leqslant cos(\alpha_{2})</math>

there exists <math>\alpha_{1}</math>, <math>cos(\alpha_{0}) \leqslant cos(\alpha_{1}) \leqslant cos(\alpha_{2})</math> s.t. <math>cos(\alpha_{1}) t_1 = \int_{0}^{t_1} cos(\alpha) dt</math>

then we have

<math>v_{bullet} sin(\theta) t_1 = v_{robot} cos(\alpha_1) t_1</math>

<math>v_{bullet} sin(\theta) = v_{robot} cos(\alpha_1)</math>

<math>sin(\theta) = \frac{v_{robot}}{v_{bullet} } cos(\alpha_1)</math>

then we have

<math>\theta_{max} = asin(\frac{v_{robot}}{v_{bullet} })</math>, which can be reached when <math>\alpha_1</math> = 0.

since <math>cos(\alpha) \leqslant cos(0) = 1</math>, <math>\alpha</math> must be always 0, which proved that retreat angle must be always 0.

And we proved that <math>\theta_{max} = asin(\frac{v_{robot}}{v_{bullet} })</math> is true.

Xor (talk)11:24, 25 September 2017

I'm still sure that getting slightly away is better both with orbital and traditional one.

Dsekercioglu (talk)08:08, 26 September 2017

Better for what? It does not increase your MEA. Though it decreases the target angular size, so it reduces the probability to be hit. Calculating probability to be hit is yet another beast, which we probably should attempt to solve analytically.

There is another issue, the traditional MEA is good only for a single isolated wave, the real question is how to increase the MEA in a stream of constantly fired bullets.

Beaming (talk)18:59, 26 September 2017

For wave surfers, I think my work is useful — User:Xor/Better_MEA_formula, as the movement is constant with time, it is naturally suitable for multiple waves ;)

Xor (talk)02:15, 27 September 2017

The problem with your formula is that it does not match traditional MEA in the border cases.

The second problem that I not fully understand it. It looks like you are integrating angular velocity to an undefined time t.

Beaming (talk)03:11, 27 September 2017

it matches orbital MEA in border cases though, as always moving perpendicular is impossible, so you have to fallback to orbital ;)

I'm integrating angular velocity from fire time to hit time, which is obviously the escape angle ;) sorry for not saying that clearly in advance, the article is still not finished ;)

Xor (talk)05:49, 27 September 2017

It increases also. If the formula below is correct, it is true.

asin(sin(a) / (v / 8 - cos(a) / 2))

You can try brute forcing.

Dsekercioglu (talk)10:42, 28 September 2017

Why is it better?

Is it more precise? or faster to calculate according to this approximation?

Also the bullet speed can go as low as 11, so discrepancy will be even higher at lower values.

Beaming (talk)03:26, 18 September 2017

By "better", I mean the traditional MEA is wrong. However I can't prove my formula is correct either.

Anyway, it is better, because it is always greater than the traditional one (while conforming to the Game Physics). Therefore closer to the theoretical MEA.

It turns out that I'm wrong. Anyway the updated calculation is useful for surfers — especially when you need to retreat and there is more than one wave.

Xor (talk)03:34, 18 September 2017
  • Don't worry about the formula returning small values. My brute force MEA returns a lower value than asin which is completely wrong but higher than the full orbit MEA 8 / Vb.
  • Traditional mea is wrong because the wave can hit when going directly to the target point which is calculated by MEA.
Dsekercioglu (talk)10:38, 18 September 2017