using System.Collections; using System.Collections.Generic; using UnityEngine; namespace YKMoon.Math { /// /// 整理的数学公式等等 /// public partial class YKMath { public static long Min(long value1, long value2) { return value1 < value2 ? value1 : value2; } public static long Max(long value1, long value2) { return value1 > value2 ? value1 : value2; } public static double Min(double value1, double value2) { return value1 < value2 ? value1 : value2; } public static double Max(double value1, double value2) { return value1 > value2 ? value1 : value2; } public static float MinMaxClamp(float value, float rangeA, float rangeB) { float max = rangeA > rangeB ? rangeA : rangeB; float min = rangeA < rangeB ? rangeA : rangeB; return Mathf.Max(Mathf.Min(value, max), min); } public static int MinMaxClamp(int value, int rangeA, int rangeB) { int max = rangeA > rangeB ? rangeA : rangeB; int min = rangeA < rangeB ? rangeA : rangeB; return Mathf.Max(Mathf.Min(value, max), min); } public static long MinMaxClamp(long value, long rangeA, long rangeB) { long max = rangeA > rangeB ? rangeA : rangeB; long min = rangeA < rangeB ? rangeA : rangeB; return Max(Min(value, max), min); } /// /// 获得Vector3,忽略Y轴 /// public static Vector3 GetVector3IgnoreYAxis(Vector3 v) { v.y = 0f; return v; } /// /// 获得距离,忽略Y轴 /// public static float GetDistanceIgnoreYAxis(Vector3 a, Vector3 b) { var delta = a - b; delta.y = 0f; return delta.magnitude; } /// /// 获得Delta,忽略y轴 /// public static Vector3 GetDeltaIgnoreYAxis(Vector3 from, Vector3 to) { var delta = to - from; delta.y = 0f; return delta; } /// /// 获得方向,忽略y轴 /// public static Vector3 GetDirIgnoreYAxis(Vector3 from, Vector3 to) { var delta = to - from; delta.y = 0f; return delta.normalized; } /// /// 获得角度,忽略y轴 /// public static float GetAngleIgnoreYAxis(Vector3 from, Vector3 to) { from.y = 0; to.y = 0; return Vector3.Angle(from, to); } /// /// 获得方向 /// public static Vector3 GetDir(Vector3 from, Vector3 to) { return (to - from).normalized; } public static Vector3 RotatePointAroundPivot(Vector3 point, Vector3 pivot, Vector3 angles) { return Quaternion.Euler(angles) * (point - pivot) + pivot; } public static float EulerSin(float eulerAngle) { return Mathf.Sin(eulerAngle * Mathf.Deg2Rad); } public static float EulerCos(float eulerAngle) { return Mathf.Cos(eulerAngle * Mathf.Deg2Rad); } public static float EulerTan(float eulerAngle) { return Mathf.Tan(eulerAngle * Mathf.Deg2Rad); } public static float EulerATan(float value) { return Mathf.Atan(value) * Mathf.Rad2Deg; } public static float EulerCot(float eulerAngle) { return 1 / EulerTan(eulerAngle); } public static float EulerASin(float value) { return Mathf.Asin(value) * Mathf.Rad2Deg; } public static float EulerACos(float value) { return Mathf.Acos(value) * Mathf.Rad2Deg; } /// /// [0,360) /// /// /// public static float FormatAngleInto360(float angle) { while(angle > 360f) { angle -= 360f; } while(angle < 0f) { angle += 360f; } return angle; } /// /// [-180, 180] /// /// /// public static float FormatAngleInto180f(float angle) { angle = FormatAngleInto360(angle); if(angle > 180f) { angle = angle - 360f; } return angle; } } }