Как убрать многомерные массивы?
Есть трехмерная функция шума:
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;
}
Источник: Stack Overflow на русском