Кривая Безье: нужно, чтобы было не 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);
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д