Кривая Безье: нужно, чтобы было не 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);