Как сделать b-сплайн кубической кривой с 4 точками в C # Unity - PullRequest
0 голосов
/ 22 октября 2019

Мне нужно вычислить 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-го уровня.

...