And to make it even faster

Jump to navigation Jump to search
Revision as of 25 September 2017 at 11:08.
The highlighted comment was created in this revision.

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

                  Can you give the formula you used to prove that my formula is wrong?

                    Dsekercioglu (talk)10:08, 24 September 2017

                    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