Is wiki wrong about MEA?

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

Is wiki wrong about MEA?

I've been using the asin(Vbot/Vbullet) formula for ages. But in my mind it should be atan(Vbot/Vbulet). Am I right?

It is not a big deal to over estimate MEA with asin. but the over estimate could be as bad as 30% for bullets with fire power equal to 3.

    Beaming (talk)04:43, 17 September 2017

    asin formula is when your opponent move perpendicular to your head on angle atan formula is when your opponent move perpendicular to your hit angle ;)

    However, the first one is greater, therefore the max (of them).

      Xor (talk)06:05, 17 September 2017

      I am arguing that the asin(Vbot/Vbullet) formula has an assumption in its derivation, which leads to the overestimation of the angle. The easy way to see that use of the asin is wrong is to assume that bullet speed is equal to the bot then asin gives 90 degrees, but you will never hit the bot this way, by symmetry MEA in this case is 45 degrees. Note that atan does it automatically.

        Beaming (talk)15:11, 17 September 2017
         

        The thing is, if the bot moves slightly away then it increases the bullet flight time, allowing the bot to reach a higher MEA than just an orbit or chord.

        Personally, in DrussGT I use a precise MEA since it gave better results. But if you have some limitation on whether the bot can exceed the calculated MEA (for example you log them to bins) then the asin is better, otherwise bots could potentially move to angles you can't shoot at.

          Skilgannon (talk)11:26, 17 September 2017

          Are you using precise MEA to scale? or just to cut. From the version history I think it is the latter, but Understanding DrussGT says former ;)

            Xor (talk)11:46, 17 September 2017

            Both.

              Skilgannon (talk)14:01, 17 September 2017
               
              I've just calculated it. If it is correct moving away helps.
                          latVel = Math.sin(angle) * 8;
                          advVel = -Math.cos(angle) * 8;
                          timeToHit = distance / (bulletSpeed + advVel);
                          mea = latVel / (distance - (timeToHit * advVel) / 2) * hitTime;
              
              This is the formula. It thinks that the bot is moving at full speed and with brute force search I got these results:
              Bullet Power 1:
              LatVel: 7.762365810207972 AdvVel: -1.9353751647973414
              Bullet Power 2:
              LatVel: 7.6504380477042835 AdvVel: -2.338973637781894
              Bullet Power 3:
              LatVel: 7.468643411977614 AdvVel: -2.8669435963624013
              Distance doesn't change anything if it isn't zero.
                Dsekercioglu (talk)14:40, 17 September 2017

                timeToHit is not taking in account that the bullet moves at some angle too, i.e. we need to use bulletSpeed*cos(MEA). In above we assume that 'a' is angle between line connecting bots and the velocity of the target.

                The last line is not precisely correct as well. There should be no factor of 2, and you forgot the atan. It should be

                 mea = atan( latVel / (distance - (timeToHit * advVel)) * hitTime );
                

                But the last thing could be simplified a bit if you notice that

                latVel = bulletSpeed*sin(MEA)
                

                Moving away is always bad idea from the MEA prospective within robocode physics.

                  Beaming (talk)15:07, 17 September 2017