美文网首页
常用数学公式

常用数学公式

作者: 男爵卡波 | 来源:发表于2017-02-08 19:27 被阅读110次

    using UnityEngine;

    using System.Collections;

    using System;

    public class MathUtilLite

    {

    #region常量

    public static Vector3 AxisX = new Vector3(1, 0, 0);

    public static Vector3 AxisY = new Vector3(0, 1, 0);

    public static Vector3 AxisZ = new Vector3(0, 0, 1);

    public static Vector3 XYZ1 = Vector3.one;

    public static float ONE_DIV_PI = 1.0f / Mathf.PI;

    public static float COS_15 = Mathf.Cos(Mathf.Deg2Rad * 15.0f);

    public static float COS_35 = Mathf.Cos(Mathf.Deg2Rad * 35.0f);

    public static float COS_45 = Mathf.Cos(Mathf.Deg2Rad * 45.0f);

    public static float COS_75 = Mathf.Cos(Mathf.Deg2Rad * 75.0f);

    public static float COS_60 = Mathf.Cos(Mathf.Deg2Rad * 60.0f);

    public static float COS_30 = Mathf.Cos(Mathf.Deg2Rad * 30.0f);

    public static float COS_20 = Mathf.Cos(Mathf.Deg2Rad * 20.0f);

    public static Vector2 AxisX2D = new Vector2(1, 0);

    public static Vector2 AxisY2D = new Vector2(0, 1);

    public static float EPSILON = 0.001f;

    #endregion

    ///

    ///时间戳转换成时间

    ///

    /// 时间戳

    ///

    public static System.DateTime TransToDateTime(uint t)

    {

    System.DateTime dt = System.TimeZone.CurrentTimeZone.ToLocalTime(newSystem.DateTime(1970, 1, 1));

    long lTime = long.Parse(t.ToString() + "0000000");

    System.TimeSpan toNow = new System.TimeSpan(lTime);

    return dt.Add(toNow);

    }

    ///

    ///计算两个三维坐标相差的距离

    ///

    ///

    ///

    /// 距离

    public static float DistancePow(Vector3 a, Vector3 b)

    {

    return (a.x - b.x) * (a.x - b.x) + (a.y - b.y) * (a.y - b.y) + (a.z -b.z) * (a.z - b.z);

    }

    ///

    ///计算两个二维坐标相差的距离

    ///

    ///

    ///

    /// 长度

    public static float DistancePow(Vector2 a, Vector2 b)

    {

    return (a.x - b.x) * (a.x - b.x) + (a.y - b.y) * (a.y - b.y);

    }

    //andeeee from the Unity forum's steller Catmull-Rom class (http://forum.unity3d.com/viewtopic.php?p=218400#218400 ):

    public static Vector3 Interp(Vector3[] pts, float t)

    {

    t = Mathf.Clamp(t, 0.0f, 2.0f);

    int numSections = pts.Length - 3;

    int currPt = Mathf.Min(Mathf.FloorToInt(t * numSections), numSections -1);

    float u = t * numSections - currPt;

    Vector3 a = pts[currPt];

    Vector3 b = pts[currPt + 1];

    Vector3 c = pts[currPt + 2];

    Vector3 d = pts[currPt + 3];

    return .5f * (

    (-a + 3f * b - 3f * c + d) * (u * u * u)

    + (2f * a - 5f * b + 4f * c - d) * (u * u)

    + (-a + c) * u

    + 2f * b

    );

    }

    ///

    ///获取两个点间的夹角

    ///

    ///

    ///

    ///

    public static float GetAngle(Vector3 form, Vector3 to)

    {

    Vector3 nVector = Vector3.zero;

    nVector.x = to.x;

    nVector.y = form.y;

    float a = to.y - nVector.y;

    float b = nVector.x - form.x;

    float tan = a / b;

    return Mathf.Atan(tan) * 180.0f * ONE_DIV_PI;

    }

    public static Vector3 ApproximateDir(Vector3 dir)

    {

    float dotX = Vector3.Dot(dir, AxisX);

    float dotZ = Vector3.Dot(dir, AxisZ);

    if (Mathf.Abs(dotX) > Mathf.Abs(dotZ))

    {

    return dotX > 0 ? AxisX : -AxisX;

    }

    else

    {

    return dotZ > 0 ? AxisZ : -AxisZ;

    }

    }

    ///

    /// normalize并且返回长度

    ///

    ///

    ///

    public static float Normalize(ref Vector3 vec)

    {

    float length = Mathf.Sqrt((vec.x * vec.x) + (vec.y * vec.y) + (vec.z *vec.z));

    if (length > 0)

    {

    float oneDivLength = 1.0f / length;

    vec.x = vec.x * oneDivLength;

    vec.y = vec.y * oneDivLength;

    vec.z = vec.z * oneDivLength;

    }

    return length;

    }

    ///

    ///尝试到达那个点

    ///

    ///

    ///

    ///

    ///

    ///

    public static Vector3 TryToMoveToPosWithSpeed(Vector3 dest, Vector3 cur,float speed, float time)

    {

    Vector3 dir = dest - cur;

    float dis = Normalize(ref dir);

    if (speed * time < dis)

    {

    return cur + dir * speed * time;

    }

    else

    {

    return dest;

    }

    }

    ///

    ///移动人物制定距离相差多少的值

    ///

    /// 目标点

    /// 当前坐标

    ///

    /// 速度

    ///

    public static Vector3 OffsetToMoveToPosWithSpeed(Vector3 dest, Vector3cur, float speed, float time)

    {

    Vector3 dir = dest - cur;

    Vector3 maxOffset = dir;

    float dis = Normalize(ref dir);

    if (speed * time < dis)

    {

    return dir * speed * time;

    }

    else

    {

    return maxOffset;

    }

    }

    ///

    /// float近似相等

    ///

    ///

    ///

    ///

    public static bool IsEqualFloat(float a, float b)

    {

    return (Math.Abs(a - b) < 0.001f);

    }

    public static bool IsEqualFloatRaw(float a, float b)

    {

    return (Math.Abs(a - b) < 0.05f);

    }

    #region 3D空间投影到屏幕坐标

    public static Vector2 ProjectToScreen(Camera cam, Vector3 point)

    {

    Vector3 screenPoint = cam.WorldToScreenPoint(point);

    return new Vector2(screenPoint.x, screenPoint.y);

    }

    #endregion

    }}

    ns":["œ�C��

    相关文章

      网友评论

          本文标题:常用数学公式

          本文链接:https://www.haomeiwen.com/subject/uaxbittx.html