using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace WPM.Poly2Tri { public class MathUtil { public static double EPSILON = 1e-12; public static bool AreValuesEqual (double val1, double val2) { return AreValuesEqual (val1, val2, EPSILON); } public static bool AreValuesEqual (double val1, double val2, double tolerance) { if (val1 >= (val2 - tolerance) && val1 <= (val2 + tolerance)) { return true; } return false; } public static bool IsValueBetween (double val, double min, double max, double tolerance) { if (min > max) { double tmp = min; min = max; max = tmp; } if ((val + tolerance) >= min && (val - tolerance) <= max) { return true; } return false; } public static double RoundWithPrecision (double f, double precision) { if (precision < 0.0) { return f; } double mul = Math.Pow (10.0, precision); double fTemp = Math.Floor (f * mul) / mul; return fTemp; } public static double Clamp (double a, double low, double high) { return Math.Max (low, Math.Min (a, high)); } public static void Swap (ref T a, ref T b) { T tmp = a; a = b; b = tmp; } public static uint Jenkins32Hash (byte[] data, uint nInitialValue) { foreach (byte b in data) { nInitialValue += (uint)b; nInitialValue += (nInitialValue << 10); nInitialValue += (nInitialValue >> 6); } nInitialValue += (nInitialValue << 3); nInitialValue ^= (nInitialValue >> 11); nInitialValue += (nInitialValue << 15); return nInitialValue; } } }