Mega Code Archive

 
Categories / C# / Development Class
 

Wraps the mod result to avoid negative results

//http://isotopescreencapture.codeplex.com/ //The MIT License (MIT) namespace Isotope.Math {     public static class MathUtil     {         /// <summary>         /// This is a variant of mod that wraps the mod result to avoid negative results. this is what Python's mod operator does         /// </summary>         /// <param name="x"></param>         /// <param name="y"></param>         /// <returns></returns>         private static double mod_wrap_angle(double x, double y)         {             if (y == 0)             {                 throw new System.DivideByZeroException();             }             double r = x%y;             if (r > 0 && y < 0)             {                 r = r + y;             }             else if (r < 0 && y > 0)             {                 r = r + y;             }             return r;         }         /// <summary>         /// wraps a number around so that it always fits between 0.0 and 1.0. negative numbers will wrap around to the correct positive number         /// </summary>         /// <remarks>         /// if the input number is already in the range, no change will occur         /// </remarks>         /// <param name="v">input value </param>         /// <returns>the wrapped number</returns>         public static double WrapAngle_0_1(double v)         {             const double min = 0.0;             const double max = 1.0;             if (IsInRange(v, min, max))             {                 // the number is already in the range so do nothing                 return v;             }             return mod_wrap_angle(v, max);         }         /// <summary>         /// Checks if a value is in a range (inclusive)         /// </summary>         /// <param name="val"></param>         /// <param name="min"></param>         /// <param name="max"></param>         /// <returns></returns>         public static bool IsInRange(double val, double min, double max)         {             return ((min <= val) && (val <= max));         }         /// <summary>         /// Checks if a value is in the range 0.0 to 1.0 inclusive         /// </summary>         /// <param name="val"></param>         /// <returns></returns>         public static bool IsInRange_0_1(double val)         {             return IsInRange(val, 0.0, 1.0);         }            } }