/// <summary>
    /// 判断两条线段是否相交
    /// 现在有线段AB和线段CB
    //用线段AB的方向和C,D两点分别做差乘比较。如果C,D在同侧则return跳出
    //用线段CD的方向和A,B两点分别做差乘比较。如果A,B在同侧则return跳出
    //最终返回相交
    /// </summary>
    /// <param name="a"></param>
    /// <param name="b"></param>
    /// <param name="c"></param>
    /// <param name="d"></param>
    /// <returns></returns>
    static bool IsTwoSegmentIntersection(Vector2L a2d, Vector2L b2d, Vector2L c2d, Vector2L d2d)
    {
        Vector3L a = new Vector3L(a2d.x, 0, a2d.y);
        Vector3L b = new Vector3L(b2d.x, 0, b2d.y);
        Vector3L c = new Vector3L(c2d.x, 0, c2d.y);
        Vector3L d = new Vector3L(d2d.x, 0, d2d.y);

        var crossA = FixPointMath.Sign(Vector3L.Cross(d - c, a - c).y);
        var crossB = FixPointMath.Sign(Vector3L.Cross(d - c, b - c).y);

        if (FixPointMath.Approximately(crossA, crossB))
        {
            return(false);
        }

        var crossC = FixPointMath.Sign(Vector3L.Cross(b - a, c - a).y);
        var crossD = FixPointMath.Sign(Vector3L.Cross(b - a, d - a).y);

        if (FixPointMath.Approximately(crossC, crossD))
        {
            return(false);
        }

        return(true);
    }
 public static FloatL MoveTowards(FloatL current, FloatL target, FloatL maxDelta)
 {
     if (FixPointMath.Abs(target - current) <= maxDelta)
     {
         return(target);
     }
     return(current + FixPointMath.Sign(target - current) * maxDelta);
 }