/// <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); }
/// <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); }