diff options
author | madmaxoft@gmail.com <madmaxoft@gmail.com@0a769ca7-a7f5-676a-18bf-c427514a06d6> | 2013-03-24 17:07:51 +0100 |
---|---|---|
committer | madmaxoft@gmail.com <madmaxoft@gmail.com@0a769ca7-a7f5-676a-18bf-c427514a06d6> | 2013-03-24 17:07:51 +0100 |
commit | 5462f43baefdf839d7d2e5036d2ec3c95d888c02 (patch) | |
tree | a202c0b0b8f6f11934c849c751ea0e573b2ffb13 /source/Noise.h | |
parent | Updated core plugin. (diff) | |
download | cuberite-5462f43baefdf839d7d2e5036d2ec3c95d888c02.tar cuberite-5462f43baefdf839d7d2e5036d2ec3c95d888c02.tar.gz cuberite-5462f43baefdf839d7d2e5036d2ec3c95d888c02.tar.bz2 cuberite-5462f43baefdf839d7d2e5036d2ec3c95d888c02.tar.lz cuberite-5462f43baefdf839d7d2e5036d2ec3c95d888c02.tar.xz cuberite-5462f43baefdf839d7d2e5036d2ec3c95d888c02.tar.zst cuberite-5462f43baefdf839d7d2e5036d2ec3c95d888c02.zip |
Diffstat (limited to 'source/Noise.h')
-rw-r--r-- | source/Noise.h | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/source/Noise.h b/source/Noise.h index 68428d33e..9a129d81f 100644 --- a/source/Noise.h +++ b/source/Noise.h @@ -85,6 +85,54 @@ extern void IntArrayLinearInterpolate2D( +/// Linearly interpolates values in the array between the anchor points; universal data type +template<typename TYPE> void ArrayLinearInterpolate2D( + TYPE * a_Array, + int a_SizeX, int a_SizeY, // Dimensions of the array + int a_AnchorStepX, int a_AnchorStepY // Distances between the anchor points in each direction +) +{ + // First interpolate columns where the anchor points are: + int LastYCell = a_SizeY - a_AnchorStepY; + for (int y = 0; y < LastYCell; y += a_AnchorStepY) + { + int Idx = a_SizeX * y; + for (int x = 0; x < a_SizeX; x += a_AnchorStepX) + { + TYPE StartValue = a_Array[Idx]; + TYPE EndValue = a_Array[Idx + a_SizeX * a_AnchorStepY]; + TYPE Diff = EndValue - StartValue; + for (int CellY = 1; CellY < a_AnchorStepY; CellY++) + { + a_Array[Idx + a_SizeX * CellY] = StartValue + Diff * CellY / a_AnchorStepY; + } // for CellY + Idx += a_AnchorStepX; + } // for x + } // for y + + // Now interpolate in rows, each row has values in the anchor columns + int LastXCell = a_SizeX - a_AnchorStepX; + for (int y = 0; y < a_SizeY; y++) + { + int Idx = a_SizeX * y; + for (int x = 0; x < LastXCell; x += a_AnchorStepX) + { + TYPE StartValue = a_Array[Idx]; + TYPE EndValue = a_Array[Idx + a_AnchorStepX]; + TYPE Diff = EndValue - StartValue; + for (int CellX = 1; CellX < a_AnchorStepX; CellX++) + { + a_Array[Idx + CellX] = StartValue + CellX * Diff / a_AnchorStepX; + } // for CellY + Idx += a_AnchorStepX; + } + } +} + + + + + #if NOISE_USE_INLINE #include "Noise.inc" #endif |