Мне нужно вычислить 4-точечный кубический неоднородный B-сплайн (p0, p1, p2, p3), который интерполирует p0 и p3.
До сих пор я не мог заставить функцию вычислятькривая, но я не знаю, как добавить кратность в точках p0 и p3, чтобы сделать интерполяцию. Код, созданный до сих пор, выглядит следующим образом.
private Vector2 CalculaB_Spline(float t, Vector2 p0, Vector2 p1, Vector2 p2, Vector2 p3)
{
//(t)=0×B0(u−2)−1×B1(u−2)+1×B2(u−2)+2×B3(u−2)
float tt = t * t;
float ttt = t * t * t;
float u = 1 - t;
float uuu = u * u * u;
float q3 = uuu;
float q2 = 3f * ttt - 6f * tt + 4f;
float q1 =-3f * ttt + 3f * tt + 3f * t + 1f;
float q0 = ttt;
Vector2 p = (p0 * q3 +
p1 * q2 +
p2 * q1 +
p3 * q0) ;
p /= 6;
return p;
}
Я надеюсь, что смогу использовать эту функцию для обеспечения непрерывности C2, объединившись с кривой Безье 5-го уровня.