123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- using System;
- using UnityEngine;
- namespace XCharts.Runtime
- {
- public static class MathUtil
- {
- public static double Abs(double d)
- {
- return d > 0 ? d : -d;
- }
- public static double Clamp(double d, double min, double max)
- {
- if (d >= min && d <= max) return d;
- else if (d < min) return min;
- else return max;
- }
- public static bool Approximately(double a, double b)
- {
- return Math.Abs(b - a) < Math.Max(0.000001f * Math.Max(Math.Abs(a), Math.Abs(b)), Mathf.Epsilon * 8);
- }
- public static double Clamp01(double value)
- {
- if (value < 0F)
- return 0F;
- else if (value > 1F)
- return 1F;
- else
- return value;
- }
- public static double Lerp(double a, double b, double t)
- {
- return a + (b - a) * Clamp01(t);
- }
- public static bool IsInteger(double value)
- {
- if (value == 0) return true;
- if (value >= -1 && value <= 1) return false;
- return Math.Abs(value % 1) <= (Double.Epsilon * 100);
- }
- public static int GetPrecision(double value)
- {
- if (IsInteger(value)) return 0;
- int count = 1;
- double intvalue = value * Mathf.Pow(10, count);
- while (!IsInteger(intvalue) && count < 38)
- {
- count++;
- intvalue = value * Mathf.Pow(10, count);
- }
- return count;
- }
- }
- }
|