And to make it even faster

Jump to navigation Jump to search

And to make it even faster

       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));
Xor (talk)13:33, 23 September 2017

btw, you can try newton's method to find the max value ;)

Xor (talk)13:40, 23 September 2017

I know. But calculated numbers weren't exact and Wolfram Alpha's computation time exceeds.

Dsekercioglu (talk)13:43, 23 September 2017
 

Precision is up to 9 numbers. I think that it is enough.

Dsekercioglu (talk)13:45, 23 September 2017
 

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).

Dsekercioglu (talk)13:55, 23 September 2017

Math.pow makes me think something like e^x, but it turned out to be polynomial.

Xor (talk)13:59, 23 September 2017
 

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.

GrubbmGait (talk)16:56, 23 September 2017

this formula is bigger, simply because it is wrong

Xor (talk)01:44, 24 September 2017

You do not have permission to edit this page, for the following reasons:

  • The action you have requested is limited to users in the group: Users.
  • You must confirm your email address before editing pages. Please set and validate your email address through your user preferences.

You can view and copy the source of this page.

Return to Thread:User talk:Dsekercioglu/MEA/And to make it even faster/reply (8).

I published the reason why it is wrong in another thread.

Xor (talk)10:49, 24 September 2017
 

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?

Rsalesc (talk)12:51, 24 September 2017

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.

Xor (talk)15:02, 24 September 2017
 
  • 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.
Dsekercioglu (talk)16:09, 24 September 2017

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.

Xor (talk)16:12, 24 September 2017
Found it!
It should be sin(a) / (v / 8 - cos(a) / 2).
Dsekercioglu (talk)16:15, 24 September 2017

The only correct formula to calculate the escape angle of orbital movement where <math>v_{retreat}</math> is not zero is using integral.

Anything else is wrong.

Xor (talk)16:18, 24 September 2017
 
I found a formula higher than Traditional MEA and this one should be correct.
Math.asin(Math.sin(angle) / (bulletSpeed / 8 - Math.cos(angle) / 2))
Dsekercioglu (talk)16:19, 24 September 2017

Anything higher than traditional formula is obviously wrong.

Xor (talk)16:21, 24 September 2017

I don't think that this one is wrong. I only added advancing velocity to the Traditional MEA which shouldn't break anything with the calculations.

Dsekercioglu (talk)16:26, 24 September 2017

No, advancing velocity makes distance not constant, therefore you mast use integral.

Xor (talk)00:44, 25 September 2017

I don't need integral. I can get the average distance.

distance - (advancingVelocity * timeToHit / 2) = bulletFloatTime - advancingVelocity / 2
Dsekercioglu (talk)11:08, 25 September 2017

No you can't use average distance, as distance is used like x / distance, not x * distance.

Xor (talk)12:08, 25 September 2017
It is equal at infinity.
(8 / 5 + 1 + 8 / 11) / 3 = 1.109090909...
(8 / 5 + 8 / 6.5 + 1 + 8 / 9.5 + 8 / 11) / 5  = 1.080029444...
This goes closer to 1 every time I decrease the step size.
Dsekercioglu (talk)15:06, 25 September 2017