Curve.CalculateBezier C# (CSharp) Method

CalculateBezier() public static method

public static CalculateBezier ( Vector3 p0, Vector3 p1, Vector3 cp0, Vector3 cp1, float t ) : Vector3
p0 Vector3
p1 Vector3
cp0 Vector3
cp1 Vector3
t float
return Vector3
    public static Vector3 CalculateBezier(Vector3 p0, Vector3 p1, Vector3 cp0, Vector3 cp1, float t)
    {
        float oneMinusT = 1f - t;
        return oneMinusT * oneMinusT * oneMinusT * p0 +
                3f * oneMinusT * oneMinusT * t * cp0 +
                3f * oneMinusT * t * t * cp1 +
                t * t * t * p1;
    }

Same methods

Curve::CalculateBezier ( Vector3 p0, Vector3 p1, Vector3 cp0, float t ) : Vector3

Usage Example

示例#1
0
        public override void AddPoint(Vector3 point)
        {
            //base.AddPoint(Point);
            if (m_AllSubKeyPathpoints.Count == 0)
            {
                QuadPoint _firstPoint = CreateFirstMeshPoint(point) as QuadPoint;
                m_AllSubKeyPathpoints.Add(_firstPoint);
                return;
            }

            QuadPoint previousQuaPoint = m_AllSubKeyPathpoints[m_AllSubKeyPathpoints.Count - 1] as QuadPoint; //上一个Key路径点
            Vector3   direction        = point - previousQuaPoint.Point_Center;                               //两个Key路径点的向量

            if (m_AllSubKeyPathpoints.Count == 1)
            {  //第一个点的方向有第二个点决定
                previousQuaPoint.CenterLeftDirNor = new Vector3(-1, 0, 0);
                m_AllSubMeshPoints.Add(previousQuaPoint.GetQuadRight());
                m_AllSubMeshPoints.Add(previousQuaPoint.GetQuadLeft());
            }



            Vector3          controllPoint1 = VectorExpand.GetPointPerpendicularTo(previousQuaPoint.GetQuadLeft(), previousQuaPoint.Point_Center, point); //获得垂直于上一个QuadPoint 点且在direction 平面的单位控制点
            List <QuadPoint> subQuadPoint   = new List <QuadPoint>();                                                                                     // 子节点Point

            for (int dex = 0; dex < previousQuaPoint.SubsectionCount; dex++)
            {
                Vector3   _subPoint = Curve.CalculateBezier(previousQuaPoint.Point_Center, point, controllPoint1, (dex + 1) * 1f / (previousQuaPoint.SubsectionCount)); //根据二阶贝塞尔曲线获得 一个分割点
                QuadPoint currentSubPoint;
                int       previousStartIndex = m_AllSubMeshPoints.Count - 2;
                if (dex == 0)
                {
                    currentSubPoint = CreateSubKeyPoint(previousQuaPoint, _subPoint) as QuadPoint;
                }
                else
                {
                    currentSubPoint = CreateSubKeyPoint(subQuadPoint[subQuadPoint.Count - 1], _subPoint) as QuadPoint;
                }

                subQuadPoint.Add(currentSubPoint);
                m_AllSubTrangles.Add(previousStartIndex);
                m_AllSubTrangles.Add(previousStartIndex + 1);
                m_AllSubMeshPoints.Add(currentSubPoint.GetQuadRight());
                m_AllSubMeshPoints.Add(currentSubPoint.GetQuadLeft());
                m_AllSubTrangles.Add(m_AllSubMeshPoints.Count - 1);  //上一个Right,上一个Left,当前的Left

                m_AllSubTrangles.Add(previousStartIndex);
                m_AllSubTrangles.Add(m_AllSubMeshPoints.Count - 1);
                m_AllSubTrangles.Add(m_AllSubMeshPoints.Count - 2);  //上一个Right,当前的Left,但情感的Left

                if (dex == previousQuaPoint.SubsectionCount - 1)
                {
                    m_AllSubKeyPathpoints.Add(currentSubPoint);
                }
            }
        }
All Usage Examples Of Curve::CalculateBezier