/// <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 bool Point2dWithLine2d(Vector2L point, Line2d line2d)
    {
        // Find the slope
        FloatL dy = (line2d.m_point2.y - line2d.m_point1.y);
        FloatL dx = (line2d.m_point2.x - line2d.m_point1.x);
        FloatL M  = dy / dx;
        // Find the Y-Intercept
        FloatL B = line2d.m_point1.y - M * line2d.m_point1.x;

        // Check line equation
        return(FixPointMath.Approximately(point.y, M * point.x + B));
    }