Ejemplo n.º 1
0
void curveInitKnotVector(S_Curve *pCurve)
{
    int         size, k, n, m, i;
    double      div, step;

    IZG_ASSERT(pCurve);

    /* parametry krivky, pocet ridicich bodu, apod. */
    size = cvecSize(pCurve->points);
    k = pCurve->degree;
    n = size - 1;
    m = n + k + 1;

    IZG_ASSERT(size >= 0 && k >= 2);

    /* zmena velikosti uzloveho vektoru */
    dvecResize(pCurve->knots, m + 1);

    /* uniformni uzlovy vektor */
    div = (double)(m - 2 * k);
    step = (div == 0.0) ? 0.0 : 1.0 / div;

    /* prvnich k+1 prvku vektoru je rovno 0 */
    for( i = 0; i < k + 1; ++i )
    {
        dvecGet(pCurve->knots, i) = 0.0;
    }
    /* zbyvajici cleny vektoru vyplnime konstantim krokem */
    for( i = k + 1; i < m - k; ++i )
    {
        dvecGet(pCurve->knots, i) = (i - k) * step;
    }
    /* poslednich k+1 prvku vektoru je rovno 1 */
    for( i = m - k; i < m + 1; ++i )
    {
        dvecGet(pCurve->knots, i) = 1.0;
    }
}
Ejemplo n.º 2
0
void curveResize(S_Curve *pCurve, int size, int k)
{
    int     i, n;

    IZG_ASSERT(pCurve && size >= 0 && k >= 2);

    /* stupen krivky */
    pCurve->degree = k;

    /* zmena velikosti vektoru */
    n = cvecSize(pCurve->points);
    cvecResize(pCurve->points, size);
    dvecResize(pCurve->weights, size);

    /* inicializace novych dat */
    for( i = n; i < size; ++i )
    {
        cvecGet(pCurve->points, i) = makeCoords(0.0, 0.0, 0.0);
        dvecGet(pCurve->weights, i) = 1.0;
    }

    /* inicializace uzloveho vektoru */
    curveInitKnotVector(pCurve);
}
Ejemplo n.º 3
0
int curveSize(S_Curve *pCurve)
{
    IZG_ASSERT(pCurve);

    return cvecSize(pCurve->points);
}
Ejemplo n.º 4
0
 uint32_t vecSize () const {
     return cvecSize () ();
 }