Кривая Безье: нужно, чтобы было не 4 точки а 7 - C#

Узнай цену своей работы

Формулировка задачи:

нужно переделать чтобы было не 4 точки а 7, не могу не как переделать, помогите пожалуйста
using System;
using System.Drawing;
 
namespace WindowsFormsApplicationTest2
{
    
    /// Кривая безье
    
    public class BezierCurve
    {
       
        /// Количество точек для отрисовки.
       
        private const int N = 500;

        /// Опорные точки.
       
        private PointF[] dataPoints;

        /// Создание кривой безье
        
        /// <param name="points">Опорные точки</param>
        public BezierCurve(PointF[] points)
        {
            if (points.Length != 4)
            {
                throw new ArgumentOutOfRangeException();
            }
            dataPoints = points;
            Invalidate();
        }

        /// Точки для отрисовки
        
        public PointF[] DrawingPoints { get; private set; }
 
        /// Опорные точки
        
        public PointF[] DataPoints
        {
            get { return dataPoints; }
            set
            {
                if (value.Length != 4)
                {
                    throw new ArgumentOutOfRangeException();
                }
                dataPoints = value;
                Invalidate();
            }
        }

        /// Опорная точка
        
        /// <param name="i">Индекс опорной точки</param>
        public PointF this[int i]
        {
            get { return dataPoints[i]; }
            set
            {
                dataPoints[i] = value;
                Invalidate();
            }
        }
 
        /// Обновить точки для отрисовки.
        
        public void Invalidate()
        {
            DrawingPoints = new PointF[N + 1];
            float dt = 1f / N;
            float t = 0f;
            for (int i = 0; i <= N; i++)
            {
                DrawingPoints[i] = B(t);
                t += dt;
            }
        }

        /// Функция кривой
       
        /// <param name="t">Параметр. Может изменяться от 0 до 1</param>
        /// <returns>Точка кривой</returns>
        private PointF B(float t)
        {
 
            float c0 = (1 - t) * (1 - t) * (1 - t);

            float c1 = (1 - t) * (1 - t) * 3 * t;
            float c2 = (1 - t) * t * 3 * t;
            float c3 = t * t * t;
 
            float x = c0 * dataPoints[0].X + c1 * dataPoints[1].X + c2 * dataPoints[2].X + c3 * dataPoints[3].X;
            float y = c0 * dataPoints[0].Y + c1 * dataPoints[1].Y + c2 * dataPoints[2].Y + c3 * dataPoints[3].Y;
            return new PointF(x, y);
 
        }

        /// Отрисовка кривой.
        
        /// <param name="g">График для отрисовки</param>
        public void Draw(Graphics g)
        {
            Pen pen = new Pen(Color.Red, 2);
            g.DrawLines(pen, DrawingPoints);
        }
    }
}

Решение задачи: «Кривая Безье: нужно, чтобы было не 4 точки а 7»

textual
Листинг программы
float c0 = (1 - t) * (1 - t) * (1 - t) * (1 - t) * (1 - t) * (1 - t)* (1 - t);
            float c1 = (1 - t) * (1 - t) * (1 - t) * (1 - t) * (1 - t) * (1 - t) * 7 * t;
            float c2 = (1 - t) * (1 - t) * (1 - t) * (1 - t) * (1 - t)  * 21 * t;
            float c3 = (1 - t) * (1 - t) * (1 - t) * (1 - t)  * 35 * t;
            float c4 = (1 - t) * (1 - t) * (1 - t)  * 35 * t;
            float c5 = (1 - t) * (1 - t)  * 21 * t;
            float c6 = (1 - t) * t * 7 * t;
            float c7 = t * t * t * t * t * t * t;
            float x = c0 * dataPoints[0].X + c1 * dataPoints[1].X + c2 * dataPoints[2].X + c3 * dataPoints[3].X + c4 * dataPoints[4].X + c5 * dataPoints[5].X + c6 * dataPoints[6].X + c7 * dataPoints[7].X;
            float y = c0 * dataPoints[0].Y + c1 * dataPoints[1].Y + c2 * dataPoints[2].Y + c3 * dataPoints[3].Y + c4 * dataPoints[4].Y + c5 * dataPoints[5].Y + c6 * dataPoints[6].Y + c7 * dataPoints[7].Y;
            return new PointF(x, y);

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 4.167 из 5
Похожие ответы