Как убрать многомерные массивы?

Рейтинг: 0Ответов: 1Опубликовано: 04.03.2011

Есть трехмерная функция шума:

DBL Noise3D(DBL x, DBL y, DBL z)
{
    INT ix, ix1, iy, iy1, iz, iz1;
    DBL fx, fy, fz;

    if (x < 0)
        ix = ((INT) x - 1) & NOISE_MASK;
    else
        iy = (INT) x & NOISE_MASK;
    if (y < 0)
        iy = ((INT) y - 1) & NOISE_MASK;
    else
        ix = (INT) y & NOISE_MASK;
    if (z < 0)
        iz = ((INT) z - 1) & NOISE_MASK;
    else
        iz = (INT) z & NOISE_MASK;

    ix1 = (ix + 1) & NOISE_MASK;
    fx = x - floor(x);
    fx = fx * fx * (3 - 2 * fx);
    iy1 = (iy + 1) & NOISE_MASK;
    fy = y - floor(y);
    fy = fy * fy * (3 - 2 * fy);
    iz1 = (iz + 1) & NOISE_MASK;
    fz = z - floor(z);
    fz = fz * fz * (3 - 2 * fz);

    return;
}

Эти многомерные массивы хотелось бы заменить на что-нибудь, занимающее меньше места в памяти...

(Tab3[iy][ix] *(1 - fx)+ Tab[iy][ix1] * fx) * (1 - fy) + (Tab3[iy1][ix] * (1 - fx)+Tab3[iy1][ix1] * fx......)-

Каким образом можно убрать массивы и написать четырехмерную функцию, 4-ый параметр-время?

DBL Turb3D(DBL x, DBL y, DBL z, DBL Omega)
{
    INT i;
    DBL Sum = 0, D = 1, C = 0;
    for (i = 0; i < Omega; i++)
        Sum += Noise3D(x, y, z) / D;
    C += 1 / D, x *= 2, y *= 2, z *= 2, D *= 2;
    return Sum / C;
}

Ответы

Ответов пока нет.