This repository has been archived on 2025-08-02. You can view files and clone it, but cannot push or open issues or pull requests.
Files
Cryville.EEW.Unity/Assets/Plugins/Poly2Tri/Utility/MathUtil.cs
2025-02-14 16:06:00 +08:00

92 lines
2.1 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace 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<T>(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;
}
}
}