The   Perlin noise   is a kind of   gradient noise   invented by   Ken Perlin   around the end of the twentieth century and still currently heavily used in   computer graphics,   most notably to procedurally generate textures or heightmaps.

The Perlin noise is basically a   pseudo-random   mapping of   





R


d




{\displaystyle \mathbb {R} ^{d}}

   into   




R



{\displaystyle \mathbb {R} }

   with an integer   



d


{\displaystyle d}

   which can be arbitrarily large but which is usually   2,   3,   or   4.

Either by using a dedicated library or by implementing the algorithm, show that the Perlin noise   (as defined in 2002 in the Java implementation below)   of the point in 3D-space with coordinates     3.14,   42,   7     is     0.13691995878400012.


Note: this result assumes 64 bit IEEE-754 floating point calculations. If your language uses a different floating point representation, make a note of it and calculate the value accurate to 15 decimal places, or your languages accuracy threshold if it is less. Trailing zeros need not be displayed.

 
#define floor(x) ((x*2.0-0.5) Shr 1)
Dim Shared As Byte p(256) => { _
151, 160, 137, 91, 90, 15, 131, 13, 201, 95, 96, 53, 194, 233, 7, 225, _
140, 36, 103, 30, 69, 142, 8, 99, 37, 240, 21, 10, 23, 190, 6, 148, _
247, 120, 234, 75, 0, 26, 197, 62, 94, 252, 219, 203, 117, 35, 11, 32, _
57, 177, 33, 88, 237, 149, 56, 87, 174, 20, 125, 136, 171, 168, 68, 175, _
74, 165, 71, 134, 139, 48, 27, 166, 77, 146, 158, 231, 83, 111, 229, 122, _
60, 211, 133, 230, 220, 105, 92, 41, 55, 46, 245, 40, 244, 102, 143, 54, _
65, 25, 63, 161, 1, 216, 80, 73, 209, 76, 132, 187, 208, 89, 18, 169, _
200, 196, 135, 130, 116, 188, 159, 86, 164, 100, 109, 198, 173, 186, 3, 64, _
52, 217, 226, 250, 124, 123, 5, 202, 38, 147, 118, 126, 255, 82, 85, 212, _
207, 206, 59, 227, 47, 16, 58, 17, 182, 189, 28, 42, 223, 183, 170, 213, _
119, 248, 152, 2, 44, 154, 163, 70, 221, 153, 101, 155, 167, 43, 172, 9, _
129, 22, 39, 253, 19, 98, 108, 110, 79, 113, 224, 232, 178, 185, 112, 104, _
218, 246, 97, 228, 251, 34, 242, 193, 238, 210, 144, 12, 191, 179, 162, 241, _
81, 51, 145, 235, 249, 14, 239, 107, 49, 192, 214, 31, 181, 199, 106, 157, _
184, 84, 204, 176, 115, 121, 50, 45, 127, 4, 150, 254, 138, 236, 205, 93, _
222, 114, 67, 29, 24, 72, 243, 141, 128, 195, 78, 66, 215, 61, 156, 180}
 
Function fade(t As Double) As Double 
    Return t * t * t * (t * (t * 6 - 15) + 10) 
End Function
 
Function lerp(t As Double, a As Double, b As Double) As Double 
    Return a + t * (b - a) 
End Function
 
Function grad(hash As Integer, x As Double, y As Double, z As Double) As Double
    Select Case (hash And 15)
    Case 0  : Return  x+y
    Case 1  : Return  y-x
    Case 2  : Return  x-y
    Case 3  : Return -x-y
    Case 4  : Return  x+z
    Case 5  : Return  z-x
    Case 6  : Return  x-z
    Case 7  : Return -x-y ' maybe -x-z?
    Case 8  : Return  y+z
    Case 9  : Return  z-y
    Case 10 : Return  y-z
    Case 11 : Return -y-z
    Case 12 : Return  x+y
    Case 13 : Return  z-y
    Case 14 : Return  y-x
    Case 15 : Return -y-z
    End Select
End Function
 
Function noise(x As Double, y As Double, z As Double) As Double
    Dim As Integer a = Int(x) And 255, b = Int(y) And 255, c = Int(z) And 255
    x -= floor(x) : y -= floor(y) : z -= floor(z)
    Dim As Double u = fade(x), v = fade(y), w = fade(z)
    Dim As Integer A0 = p(a)+b,   A1 = p(A0)+c, A2 = p(A0+1)+c
    Dim As Integer B0 = p(a+1)+b, B1 = p(B0)+c, B2 = p(B0+1)+c
 
    Return lerp(w, lerp(v, lerp(u, grad(p(A1),   x,   y,   z), _
                                   grad(p(B1),   x-1, y,   z)), _
                           lerp(u, grad(p(A2),   x,   y-1, z), _
                                   grad(p(B2),   x-1, y-1, z))), _
                   lerp(v, lerp(u, grad(p(A1+1), x,   y,   z-1), _
                                   grad(p(B1+1), x-1, y,   z-1)), _
                           lerp(u, grad(p(A2+1), x,   y-1, z-1), _
                                   grad(p(B2+1), x-1, y-1, z-1))))
End Function
 
Print Using "El Ruido Perlin para (3.14, 42, 7) es #.################"; noise(3.14, 42, 7)
Sleep
 