美文网首页
C#贝尔赛曲线点的数组获取

C#贝尔赛曲线点的数组获取

作者: 小骄傲999 | 来源:发表于2021-04-21 14:55 被阅读0次

/// <summary>

    /// 获取存储贝塞尔曲线点的数组

    /// </summary>

    /// <param name="startPoint"></param>起始点

    /// <param name="controlPoint"></param>控制点

    /// <param name="endPoint"></param>目标点

    /// <param name="segmentNum"></param>采样点的数量

    /// <returns></returns>存储贝塞尔曲线点的数组

    public Vector3[] GetBeizerList(Vector3 startPoint, Vector3 controlPoint, Vector3 endPoint, int segmentNum)//, float slopePeak, float offectValue

    {

        Vector3[] path = new Vector3[segmentNum+1];

        path[0] = startPoint;

        for (int i = 1; i <= segmentNum; i++)

        {

            float t = i / (float)segmentNum;

            Vector3 pixel = CalculateCubicBezierPoint(t, startPoint, controlPoint, endPoint);

            path[i] = pixel;

        }

        path[segmentNum] = endPoint;

        return path;

    }

1,二次贝尔赛曲线通过系数,开始点,中间点,目标点获取

private Vector3 CalculateCubicBezierPoint(float t, Vector3 p0, Vector3 p1, Vector3 p2)

    {

        float u = 1 - t;

        float tt = t * t;

        float uu = u * u;

        Vector3 p = uu * p0;

        p += 2 * u * t * p1;

        p += tt * p2;

        return p;

    }

2,三次贝尔赛曲线通过系数,开始点,两个中间点,目标点获取

//获得贝塞尔曲线的数组

    Vector3 CalculateCubicBezierPoint(float t, Vector3 p0, Vector3 p1, Vector3 p2,Vector3 p3)

    {

        float u = 1 - t;

        float uu = u * u;

        float uuu = u * u * u;

        float tt = t * t;

        float ttt = t * t * t;

        Vector3 p = p0 * uuu;

        p += 3 * p1 * t * uu;

        p += 3 * p2 * tt * u;

        p += p3 * ttt;

        return p;

    }

相关文章

网友评论

      本文标题:C#贝尔赛曲线点的数组获取

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