Reset() public method

public Reset ( double x, double y, double radiusDEG ) : void
x double
y double
radiusDEG double
return void
コード例 #1
0
 private void Init()
 {
     if (radiusDEG > 90)
     {
         //--spans more than half the globe
         Debug.Assert(enclosingBox.GetWidth() == 360);
         double backDistDEG = 180 - radiusDEG;
         if (backDistDEG > 0)
         {
             double backRadius = 180 - radiusDEG;
             double backX      = DistanceUtils.NormLonDEG(GetCenter().GetX() + 180);
             double backY      = DistanceUtils.NormLatDEG(GetCenter().GetY() + 180);
             //Shrink inverseCircle as small as possible to avoid accidental overlap.
             // Note that this is tricky business to come up with a value small enough
             // but not too small or else numerical conditioning issues become a problem.
             backRadius -= Math.Max(Ulp(Math.Abs(backY) + backRadius), Ulp(Math.Abs(backX) + backRadius));
             if (inverseCircle != null)
             {
                 inverseCircle.Reset(backX, backY, backRadius);
             }
             else
             {
                 inverseCircle = new GeoCircle(ctx.MakePoint(backX, backY), backRadius, ctx);
             }
         }
         else
         {
             inverseCircle = null;        //whole globe
         }
         horizAxisY = GetCenter().GetY(); //although probably not used
     }
     else
     {
         inverseCircle = null;
         double _horizAxisY = ctx.GetDistCalc().CalcBoxByDistFromPt_yHorizAxisDEG(GetCenter(), radiusDEG, ctx);
         //some rare numeric conditioning cases can cause this to be barely beyond the box
         if (_horizAxisY > enclosingBox.GetMaxY())
         {
             horizAxisY = enclosingBox.GetMaxY();
         }
         else if (_horizAxisY < enclosingBox.GetMinY())
         {
             horizAxisY = enclosingBox.GetMinY();
         }
         else
         {
             horizAxisY = _horizAxisY;
         }
         //Debug.Assert(enclosingBox.Relate_yRange(horizAxis, horizAxis, ctx).Intersects());
     }
 }