Exemple #1
0
        /// <summary>
        /// Is the specified range of angles within a stored interval?
        /// </summary>
        /// <param name="startAngle"></param>
        /// <param name="endAngle"></param>
        /// <param name="tolerance"></param>
        /// <returns></returns>
        public CellObscurance isInsideRegion(Angle startAngle, Angle endAngle, double tolerance)
        {
            startAngle = startAngle.NormalizeTo2PI();
            endAngle   = endAngle.NormalizeTo2PI();
            bool           startInside = false;
            bool           endInside   = false;
            CellObscurance result      = CellObscurance.Unobscured;

            foreach (var entry in _Regions)
            {
                double min = entry.Key;
                double max = entry.Value;
                if (!_wraps || min > 0.000001)
                {
                    min += tolerance;
                }
                if (!_wraps || max < Math.PI * 2 - 0.000001)
                {
                    max -= tolerance;
                }
                if (startAngle >= min && startAngle <= max)
                {
                    startInside = true;
                }
                if (endAngle >= min && endAngle <= max)
                {
                    endInside = true;
                }
                if (startInside && endInside)
                {
                    return(null);
                }
                else if (startInside || endInside)
                {
                    if (result == CellObscurance.Unobscured)
                    {
                        result = new PartialCellObscurance(min, max);
                    }
                    else
                    {
                        //return null;
                        PartialCellObscurance pLC = (PartialCellObscurance)result;
                        if (_wraps && max >= Math.PI * 2 - 0.000001 && pLC.StartAngle < 0.00001)
                        {
                            pLC.StartAngle = min;
                        }
                    }
                    if (!_wraps)
                    {
                        return(result);
                    }
                }
            }
            return(result);
        }
Exemple #2
0
 /// <summary>
 /// Is the specified angle within a stored interval?
 /// </summary>
 /// <param name="angle"></param>
 /// <param name="tolerance"></param>
 /// <returns></returns>
 public bool isInsideRegion(Angle angle, double tolerance = 0.0001)
 {
     angle = angle.NormalizeTo2PI();
     foreach (var entry in _Regions)
     {
         double min = entry.Key;
         double max = entry.Value;
         if (!_wraps || min > 0.000001)
         {
             min += tolerance;
         }
         if (!_wraps || max < Math.PI * 2 - 0.000001)
         {
             max -= tolerance;
         }
         if (min <= angle && max >= angle)
         {
             return(true);
         }
     }
     return(false);
 }