double InterpolatedNoise2D (double x, double y) { double xInt, yInt, xFrac = modf (x, &xInt), yFrac = modf (x, &yInt); double v1 = SmoothedNoise2D ((long) xInt, (long) yInt); double v2 = SmoothedNoise2D ((long) xInt+1, (long) yInt); double v3 = SmoothedNoise2D ((long) xInt, (long) yInt+1); double v4 = SmoothedNoise2D ((long) xInt+1, (long) yInt+1); double i1 = CosineInterpolate (v1, v2, xFrac); double i2 = CosineInterpolate (v3, v4, xFrac); return CosineInterpolate (i1, i2, yFrac); }
eeFloat cPerlinNoise::InterpolatedNoise2D(eeFloat x, eeFloat y) { Int32 eger_X = static_cast<Int32>( x ); Int32 eger_Y = static_cast<Int32>( y ); eeFloat fractional_X = x - eger_X; eeFloat fractional_Y = y - eger_Y; eeFloat feger_X = static_cast<eeFloat> ( eger_X ); eeFloat feger_Y = static_cast<eeFloat> ( eger_Y ); eeFloat v1 = SmoothedNoise2D( feger_X , feger_Y ); eeFloat v2 = SmoothedNoise2D( feger_X + 1.f , feger_Y ); eeFloat v3 = SmoothedNoise2D( feger_X , feger_Y + 1.f ); eeFloat v4 = SmoothedNoise2D( feger_X + 1.f , feger_Y + 1.f ); eeFloat i1 = Interpolate( v1 , v2 , fractional_X ); eeFloat i2 = Interpolate( v3 , v4 , fractional_X ); return Interpolate( i1 , i2 , fractional_Y ); }