User talk:Dsekercioglu/MEA
- [View source↑]
- [History↑]
Contents
Thread title | Replies | Last modified |
---|---|---|
And to make it even faster | 22 | 16:08, 25 September 2017 |
Principles behind? | 1 | 02:56, 24 September 2017 |
double x = bulletSpeed; double a = -3.508129323E-5; double b = 2.460363294E-3; double c = -6.666318894E-2; double d = 8.545020365E-1; double e = -3.337830707; double angle = a * x * x * x * x + b * x * x * x + c * x * x + d * x + e; return Math.sin(angle) / (bulletSpeed / 8 - Math.cos(angle));
I know. But calculated numbers weren't exact and Wolfram Alpha's computation time exceeds.
Sorry, I didn't see that you changed the code. In my robot I did it like that but it is more understandable with Math.pow(x, y).
Wow, I had no idea that the escape angle could be 15% bigger than traditional MEA calculation at the most common bulletspeed of 1.9 . . . Seems like my list of things to do for GresSuffurd to become top-10 again, gets bigger and bigger.
I also agree that it's wrong. But why is it bigger than the correct one? Can you clarify that?
I understood that the problem with this is that it assumes that it's optimal to move in a fixed retreat angle (like moving in a perfect orbit), when it's actually true that the best retreat angle isn't a function only of the initial position, but it changes as you move around the wave. Is that the real issue?
I knew it's wrong because I had made the same mistake in my previous research.
It's bigger, simply because it uses some smaller distance to calculate the radians.
The correct one is:
<math>\theta = \int_0^{t_1} \frac{v_{lateral}}{d_{initial} + v_{retreat} t}dt</math>
where <math>\theta</math> is the escape angle, <math>t_1</math> is the total time (from bullet fired, to bullet hit). (this formula is true even if <math>v_{lateral}</math> or <math>v_{retreat}</math> is not constant)
Note that <math>d_{initial} + v_{retreat} t</math> is bigger than (his) <math>(v_{bullet} - \overline{v_{retreat}})t_1</math> almost all of the time,
as <math>d_{initial} =
(v_{bullet} - \overline{v_{retreat}})t_1</math>.
Therefore his integral (<math>\theta = \int_0^{t_1} \frac{v_{lateral}}{(v_{bullet} - \overline{v_{retreat}})t_1}dt = \frac{v_{lateral}}{v_{bullet} - \overline{v_{retreat}}}</math>, assume <math>v_{lateral}</math> is constant) is bigger.
- Actually, I'm not sure that Traditional MEA is correct. It assumes that the bot doesn't change it's move angle until the wave hits. Because of that you can't get a MEA higher than Pi / 2 with Traditional MEA formula. When you move orbitally, lateralVelocity / (bulletSpeed + advancingVelocity) is the formula that will give you the EA so you can get a EA higher than Pi / 2.
You can't get escape angle higher than Pi/2 by the traditional formula simply because it is impossible.
If your formula can, it must be wrong.
in your calculation, you are calculating escape angle theta as theta = v_lateral / (v_bullet - v_retreat)
however, imo this formula is only true when you are moving orbital exactly ;)
Else, you have to calculate some integral, as the change rate of theta is changing everytime the distance changes. (Like my version)
imo if you really want to calculate the max escape in a brute force way — try every possible paths a robot can move.
And that would be, for an estimated hit time of 50ticks, if you try 360 angles per tick — there will be 360^50 angles in total (~10^128). Anyway, you can always prune a lot of them.