/** * Generate overlapping cubic lattices for 3D Re-oriented BCC noise. * Lookup table implementation inspired by DigitalShadow. * It was actually faster to narrow down the points in the loop itself, * than to build up the index with enough info to isolate 4 points. */ private double Noise3_BCC(double xr, double yr, double zr) { // Get base and offsets inside cube of first lattice. int xrb = NoiseUtil.FastFloor(xr), yrb = NoiseUtil.FastFloor(yr), zrb = NoiseUtil.FastFloor(zr); double xri = xr - xrb, yri = yr - yrb, zri = zr - zrb; // Identify which octant of the cube we're in. This determines which cell // in the other cubic lattice we're in, and also narrows down one point on each. int xht = (int)(xri + 0.5), yht = (int)(yri + 0.5), zht = (int)(zri + 0.5); int index = (xht << 0) | (yht << 1) | (zht << 2); // Point contributions double value = 0; LatticePoint3D c = LOOKUP_3D[index]; while (c != null) { double dxr = xri + c.dxr, dyr = yri + c.dyr, dzr = zri + c.dzr; double attn = 0.5 - dxr * dxr - dyr * dyr - dzr * dzr; if (attn < 0) { c = c.NextOnFailure; } else { int pxm = (xrb + c.xrv) & PMASK, pym = (yrb + c.yrv) & PMASK, pzm = (zrb + c.zrv) & PMASK; Grad3 grad = permGrad3[perm[perm[pxm] ^ pym] ^ pzm]; double extrapolation = grad.dx * dxr + grad.dy * dyr + grad.dz * dzr; attn *= attn; value += attn * attn * extrapolation; c = c.NextOnSuccess; } } return(value); }
static OpenSimplex2F() { Lookup2D = new LatticePoint2D[4]; Lookup3D = new LatticePoint3D[8]; Vertices4D = new LatticePoint4D[16]; Lookup2D[0] = new LatticePoint2D(1, 0); Lookup2D[1] = new LatticePoint2D(0, 0); Lookup2D[2] = new LatticePoint2D(1, 1); Lookup2D[3] = new LatticePoint2D(0, 1); for (var i = 0; i < 8; i++) { var i1 = (i >> 0) & 1; var j1 = (i >> 1) & 1; var k1 = (i >> 2) & 1; var i2 = i1 ^ 1; var j2 = j1 ^ 1; var k2 = k1 ^ 1; // The two points within this octant, one from each of the two cubic half-lattices. var c0 = new LatticePoint3D(i1, j1, k1, 0); var c1 = new LatticePoint3D(i1 + i2, j1 + j2, k1 + k2, 1); // Each single step away on the first half-lattice. var c2 = new LatticePoint3D(i1 ^ 1, j1, k1, 0); var c3 = new LatticePoint3D(i1, j1 ^ 1, k1, 0); var c4 = new LatticePoint3D(i1, j1, k1 ^ 1, 0); // Each single step away on the second half-lattice. var c5 = new LatticePoint3D(i1 + (i2 ^ 1), j1 + j2, k1 + k2, 1); var c6 = new LatticePoint3D(i1 + i2, j1 + (j2 ^ 1), k1 + k2, 1); var c7 = new LatticePoint3D(i1 + i2, j1 + j2, k1 + (k2 ^ 1), 1); // First two are guaranteed. c0.NextOnFailure = c0.NextOnSuccess = c1; c1.NextOnFailure = c1.NextOnSuccess = c2; // Once we find one on the first half-lattice, the rest are out. // In addition, knowing c2 rules out c5. c2.NextOnFailure = c3; c2.NextOnSuccess = c6; c3.NextOnFailure = c4; c3.NextOnSuccess = c5; c4.NextOnFailure = c4.NextOnSuccess = c5; // Once we find one on the second half-lattice, the rest are out. c5.NextOnFailure = c6; c5.NextOnSuccess = null; c6.NextOnFailure = c7; c6.NextOnSuccess = null; c7.NextOnFailure = c7.NextOnSuccess = null; Lookup3D[i] = c0; } for (var i = 0; i < 16; i++) { Vertices4D[i] = new LatticePoint4D((i >> 0) & 1, (i >> 1) & 1, (i >> 2) & 1, (i >> 3) & 1); } Gradients2D = new Grad2[Psize]; Grad2[] grad2 = { new Grad2(0.130526192220052, 0.99144486137381), new Grad2(0.38268343236509, 0.923879532511287), new Grad2(0.608761429008721, 0.793353340291235), new Grad2(0.793353340291235, 0.608761429008721), new Grad2(0.923879532511287, 0.38268343236509), new Grad2(0.99144486137381, 0.130526192220051), new Grad2(0.99144486137381, -0.130526192220051), new Grad2(0.923879532511287, -0.38268343236509), new Grad2(0.793353340291235, -0.60876142900872), new Grad2(0.608761429008721, -0.793353340291235), new Grad2(0.38268343236509, -0.923879532511287), new Grad2(0.130526192220052, -0.99144486137381), new Grad2(-0.130526192220052, -0.99144486137381), new Grad2(-0.38268343236509, -0.923879532511287), new Grad2(-0.608761429008721, -0.793353340291235), new Grad2(-0.793353340291235, -0.608761429008721), new Grad2(-0.923879532511287, -0.38268343236509), new Grad2(-0.99144486137381, -0.130526192220052), new Grad2(-0.99144486137381, 0.130526192220051), new Grad2(-0.923879532511287, 0.38268343236509), new Grad2(-0.793353340291235, 0.608761429008721), new Grad2(-0.608761429008721, 0.793353340291235), new Grad2(-0.38268343236509, 0.923879532511287), new Grad2(-0.130526192220052, 0.99144486137381) }; foreach (var t in grad2) { t.Dx /= N2; t.Dy /= N2; } for (var i = 0; i < Psize; i++) { Gradients2D[i] = grad2[i % grad2.Length]; } Gradients3D = new Grad3[Psize]; Grad3[] grad3 = { new Grad3(-2.22474487139, -2.22474487139, -1.0), new Grad3(-2.22474487139, -2.22474487139, 1.0), new Grad3(-3.0862664687972017, -1.1721513422464978, 0.0), new Grad3(-1.1721513422464978, -3.0862664687972017, 0.0), new Grad3(-2.22474487139, -1.0, -2.22474487139), new Grad3(-2.22474487139, 1.0, -2.22474487139), new Grad3(-1.1721513422464978, 0.0, -3.0862664687972017), new Grad3(-3.0862664687972017, 0.0, -1.1721513422464978), new Grad3(-2.22474487139, -1.0, 2.22474487139), new Grad3(-2.22474487139, 1.0, 2.22474487139), new Grad3(-3.0862664687972017, 0.0, 1.1721513422464978), new Grad3(-1.1721513422464978, 0.0, 3.0862664687972017), new Grad3(-2.22474487139, 2.22474487139, -1.0), new Grad3(-2.22474487139, 2.22474487139, 1.0), new Grad3(-1.1721513422464978, 3.0862664687972017, 0.0), new Grad3(-3.0862664687972017, 1.1721513422464978, 0.0), new Grad3(-1.0, -2.22474487139, -2.22474487139), new Grad3(1.0, -2.22474487139, -2.22474487139), new Grad3(0.0, -3.0862664687972017, -1.1721513422464978), new Grad3(0.0, -1.1721513422464978, -3.0862664687972017), new Grad3(-1.0, -2.22474487139, 2.22474487139), new Grad3(1.0, -2.22474487139, 2.22474487139), new Grad3(0.0, -1.1721513422464978, 3.0862664687972017), new Grad3(0.0, -3.0862664687972017, 1.1721513422464978), new Grad3(-1.0, 2.22474487139, -2.22474487139), new Grad3(1.0, 2.22474487139, -2.22474487139), new Grad3(0.0, 1.1721513422464978, -3.0862664687972017), new Grad3(0.0, 3.0862664687972017, -1.1721513422464978), new Grad3(-1.0, 2.22474487139, 2.22474487139), new Grad3(1.0, 2.22474487139, 2.22474487139), new Grad3(0.0, 3.0862664687972017, 1.1721513422464978), new Grad3(0.0, 1.1721513422464978, 3.0862664687972017), new Grad3(2.22474487139, -2.22474487139, -1.0), new Grad3(2.22474487139, -2.22474487139, 1.0), new Grad3(1.1721513422464978, -3.0862664687972017, 0.0), new Grad3(3.0862664687972017, -1.1721513422464978, 0.0), new Grad3(2.22474487139, -1.0, -2.22474487139), new Grad3(2.22474487139, 1.0, -2.22474487139), new Grad3(3.0862664687972017, 0.0, -1.1721513422464978), new Grad3(1.1721513422464978, 0.0, -3.0862664687972017), new Grad3(2.22474487139, -1.0, 2.22474487139), new Grad3(2.22474487139, 1.0, 2.22474487139), new Grad3(1.1721513422464978, 0.0, 3.0862664687972017), new Grad3(3.0862664687972017, 0.0, 1.1721513422464978), new Grad3(2.22474487139, 2.22474487139, -1.0), new Grad3(2.22474487139, 2.22474487139, 1.0), new Grad3(3.0862664687972017, 1.1721513422464978, 0.0), new Grad3(1.1721513422464978, 3.0862664687972017, 0.0) }; foreach (var t in grad3) { t.Dx /= N3; t.Dy /= N3; t.Dz /= N3; } for (var i = 0; i < Psize; i++) { Gradients3D[i] = grad3[i % grad3.Length]; } Gradients4D = new Grad4[Psize]; Grad4[] grad4 = { new Grad4(-0.753341017856078, -0.37968289875261624, -0.37968289875261624, -0.37968289875261624), new Grad4(-0.7821684431180708, -0.4321472685365301, -0.4321472685365301, 0.12128480194602098), new Grad4(-0.7821684431180708, -0.4321472685365301, 0.12128480194602098, -0.4321472685365301), new Grad4(-0.7821684431180708, 0.12128480194602098, -0.4321472685365301, -0.4321472685365301), new Grad4(-0.8586508742123365, -0.508629699630796, 0.044802370851755174, 0.044802370851755174), new Grad4(-0.8586508742123365, 0.044802370851755174, -0.508629699630796, 0.044802370851755174), new Grad4(-0.8586508742123365, 0.044802370851755174, 0.044802370851755174, -0.508629699630796), new Grad4(-0.9982828964265062, -0.03381941603233842, -0.03381941603233842, -0.03381941603233842), new Grad4(-0.37968289875261624, -0.753341017856078, -0.37968289875261624, -0.37968289875261624), new Grad4(-0.4321472685365301, -0.7821684431180708, -0.4321472685365301, 0.12128480194602098), new Grad4(-0.4321472685365301, -0.7821684431180708, 0.12128480194602098, -0.4321472685365301), new Grad4(0.12128480194602098, -0.7821684431180708, -0.4321472685365301, -0.4321472685365301), new Grad4(-0.508629699630796, -0.8586508742123365, 0.044802370851755174, 0.044802370851755174), new Grad4(0.044802370851755174, -0.8586508742123365, -0.508629699630796, 0.044802370851755174), new Grad4(0.044802370851755174, -0.8586508742123365, 0.044802370851755174, -0.508629699630796), new Grad4(-0.03381941603233842, -0.9982828964265062, -0.03381941603233842, -0.03381941603233842), new Grad4(-0.37968289875261624, -0.37968289875261624, -0.753341017856078, -0.37968289875261624), new Grad4(-0.4321472685365301, -0.4321472685365301, -0.7821684431180708, 0.12128480194602098), new Grad4(-0.4321472685365301, 0.12128480194602098, -0.7821684431180708, -0.4321472685365301), new Grad4(0.12128480194602098, -0.4321472685365301, -0.7821684431180708, -0.4321472685365301), new Grad4(-0.508629699630796, 0.044802370851755174, -0.8586508742123365, 0.044802370851755174), new Grad4(0.044802370851755174, -0.508629699630796, -0.8586508742123365, 0.044802370851755174), new Grad4(0.044802370851755174, 0.044802370851755174, -0.8586508742123365, -0.508629699630796), new Grad4(-0.03381941603233842, -0.03381941603233842, -0.9982828964265062, -0.03381941603233842), new Grad4(-0.37968289875261624, -0.37968289875261624, -0.37968289875261624, -0.753341017856078), new Grad4(-0.4321472685365301, -0.4321472685365301, 0.12128480194602098, -0.7821684431180708), new Grad4(-0.4321472685365301, 0.12128480194602098, -0.4321472685365301, -0.7821684431180708), new Grad4(0.12128480194602098, -0.4321472685365301, -0.4321472685365301, -0.7821684431180708), new Grad4(-0.508629699630796, 0.044802370851755174, 0.044802370851755174, -0.8586508742123365), new Grad4(0.044802370851755174, -0.508629699630796, 0.044802370851755174, -0.8586508742123365), new Grad4(0.044802370851755174, 0.044802370851755174, -0.508629699630796, -0.8586508742123365), new Grad4(-0.03381941603233842, -0.03381941603233842, -0.03381941603233842, -0.9982828964265062), new Grad4(-0.6740059517812944, -0.3239847771997537, -0.3239847771997537, 0.5794684678643381), new Grad4(-0.7504883828755602, -0.4004672082940195, 0.15296486218853164, 0.5029860367700724), new Grad4(-0.7504883828755602, 0.15296486218853164, -0.4004672082940195, 0.5029860367700724), new Grad4(-0.8828161875373585, 0.08164729285680945, 0.08164729285680945, 0.4553054119602712), new Grad4(-0.4553054119602712, -0.08164729285680945, -0.08164729285680945, 0.8828161875373585), new Grad4(-0.5029860367700724, -0.15296486218853164, 0.4004672082940195, 0.7504883828755602), new Grad4(-0.5029860367700724, 0.4004672082940195, -0.15296486218853164, 0.7504883828755602), new Grad4(-0.5794684678643381, 0.3239847771997537, 0.3239847771997537, 0.6740059517812944), new Grad4(-0.3239847771997537, -0.6740059517812944, -0.3239847771997537, 0.5794684678643381), new Grad4(-0.4004672082940195, -0.7504883828755602, 0.15296486218853164, 0.5029860367700724), new Grad4(0.15296486218853164, -0.7504883828755602, -0.4004672082940195, 0.5029860367700724), new Grad4(0.08164729285680945, -0.8828161875373585, 0.08164729285680945, 0.4553054119602712), new Grad4(-0.08164729285680945, -0.4553054119602712, -0.08164729285680945, 0.8828161875373585), new Grad4(-0.15296486218853164, -0.5029860367700724, 0.4004672082940195, 0.7504883828755602), new Grad4(0.4004672082940195, -0.5029860367700724, -0.15296486218853164, 0.7504883828755602), new Grad4(0.3239847771997537, -0.5794684678643381, 0.3239847771997537, 0.6740059517812944), new Grad4(-0.3239847771997537, -0.3239847771997537, -0.6740059517812944, 0.5794684678643381), new Grad4(-0.4004672082940195, 0.15296486218853164, -0.7504883828755602, 0.5029860367700724), new Grad4(0.15296486218853164, -0.4004672082940195, -0.7504883828755602, 0.5029860367700724), new Grad4(0.08164729285680945, 0.08164729285680945, -0.8828161875373585, 0.4553054119602712), new Grad4(-0.08164729285680945, -0.08164729285680945, -0.4553054119602712, 0.8828161875373585), new Grad4(-0.15296486218853164, 0.4004672082940195, -0.5029860367700724, 0.7504883828755602), new Grad4(0.4004672082940195, -0.15296486218853164, -0.5029860367700724, 0.7504883828755602), new Grad4(0.3239847771997537, 0.3239847771997537, -0.5794684678643381, 0.6740059517812944), new Grad4(-0.6740059517812944, -0.3239847771997537, 0.5794684678643381, -0.3239847771997537), new Grad4(-0.7504883828755602, -0.4004672082940195, 0.5029860367700724, 0.15296486218853164), new Grad4(-0.7504883828755602, 0.15296486218853164, 0.5029860367700724, -0.4004672082940195), new Grad4(-0.8828161875373585, 0.08164729285680945, 0.4553054119602712, 0.08164729285680945), new Grad4(-0.4553054119602712, -0.08164729285680945, 0.8828161875373585, -0.08164729285680945), new Grad4(-0.5029860367700724, -0.15296486218853164, 0.7504883828755602, 0.4004672082940195), new Grad4(-0.5029860367700724, 0.4004672082940195, 0.7504883828755602, -0.15296486218853164), new Grad4(-0.5794684678643381, 0.3239847771997537, 0.6740059517812944, 0.3239847771997537), new Grad4(-0.3239847771997537, -0.6740059517812944, 0.5794684678643381, -0.3239847771997537), new Grad4(-0.4004672082940195, -0.7504883828755602, 0.5029860367700724, 0.15296486218853164), new Grad4(0.15296486218853164, -0.7504883828755602, 0.5029860367700724, -0.4004672082940195), new Grad4(0.08164729285680945, -0.8828161875373585, 0.4553054119602712, 0.08164729285680945), new Grad4(-0.08164729285680945, -0.4553054119602712, 0.8828161875373585, -0.08164729285680945), new Grad4(-0.15296486218853164, -0.5029860367700724, 0.7504883828755602, 0.4004672082940195), new Grad4(0.4004672082940195, -0.5029860367700724, 0.7504883828755602, -0.15296486218853164), new Grad4(0.3239847771997537, -0.5794684678643381, 0.6740059517812944, 0.3239847771997537), new Grad4(-0.3239847771997537, -0.3239847771997537, 0.5794684678643381, -0.6740059517812944), new Grad4(-0.4004672082940195, 0.15296486218853164, 0.5029860367700724, -0.7504883828755602), new Grad4(0.15296486218853164, -0.4004672082940195, 0.5029860367700724, -0.7504883828755602), new Grad4(0.08164729285680945, 0.08164729285680945, 0.4553054119602712, -0.8828161875373585), new Grad4(-0.08164729285680945, -0.08164729285680945, 0.8828161875373585, -0.4553054119602712), new Grad4(-0.15296486218853164, 0.4004672082940195, 0.7504883828755602, -0.5029860367700724), new Grad4(0.4004672082940195, -0.15296486218853164, 0.7504883828755602, -0.5029860367700724), new Grad4(0.3239847771997537, 0.3239847771997537, 0.6740059517812944, -0.5794684678643381), new Grad4(-0.6740059517812944, 0.5794684678643381, -0.3239847771997537, -0.3239847771997537), new Grad4(-0.7504883828755602, 0.5029860367700724, -0.4004672082940195, 0.15296486218853164), new Grad4(-0.7504883828755602, 0.5029860367700724, 0.15296486218853164, -0.4004672082940195), new Grad4(-0.8828161875373585, 0.4553054119602712, 0.08164729285680945, 0.08164729285680945), new Grad4(-0.4553054119602712, 0.8828161875373585, -0.08164729285680945, -0.08164729285680945), new Grad4(-0.5029860367700724, 0.7504883828755602, -0.15296486218853164, 0.4004672082940195), new Grad4(-0.5029860367700724, 0.7504883828755602, 0.4004672082940195, -0.15296486218853164), new Grad4(-0.5794684678643381, 0.6740059517812944, 0.3239847771997537, 0.3239847771997537), new Grad4(-0.3239847771997537, 0.5794684678643381, -0.6740059517812944, -0.3239847771997537), new Grad4(-0.4004672082940195, 0.5029860367700724, -0.7504883828755602, 0.15296486218853164), new Grad4(0.15296486218853164, 0.5029860367700724, -0.7504883828755602, -0.4004672082940195), new Grad4(0.08164729285680945, 0.4553054119602712, -0.8828161875373585, 0.08164729285680945), new Grad4(-0.08164729285680945, 0.8828161875373585, -0.4553054119602712, -0.08164729285680945), new Grad4(-0.15296486218853164, 0.7504883828755602, -0.5029860367700724, 0.4004672082940195), new Grad4(0.4004672082940195, 0.7504883828755602, -0.5029860367700724, -0.15296486218853164), new Grad4(0.3239847771997537, 0.6740059517812944, -0.5794684678643381, 0.3239847771997537), new Grad4(-0.3239847771997537, 0.5794684678643381, -0.3239847771997537, -0.6740059517812944), new Grad4(-0.4004672082940195, 0.5029860367700724, 0.15296486218853164, -0.7504883828755602), new Grad4(0.15296486218853164, 0.5029860367700724, -0.4004672082940195, -0.7504883828755602), new Grad4(0.08164729285680945, 0.4553054119602712, 0.08164729285680945, -0.8828161875373585), new Grad4(-0.08164729285680945, 0.8828161875373585, -0.08164729285680945, -0.4553054119602712), new Grad4(-0.15296486218853164, 0.7504883828755602, 0.4004672082940195, -0.5029860367700724), new Grad4(0.4004672082940195, 0.7504883828755602, -0.15296486218853164, -0.5029860367700724), new Grad4(0.3239847771997537, 0.6740059517812944, 0.3239847771997537, -0.5794684678643381), new Grad4(0.5794684678643381, -0.6740059517812944, -0.3239847771997537, -0.3239847771997537), new Grad4(0.5029860367700724, -0.7504883828755602, -0.4004672082940195, 0.15296486218853164), new Grad4(0.5029860367700724, -0.7504883828755602, 0.15296486218853164, -0.4004672082940195), new Grad4(0.4553054119602712, -0.8828161875373585, 0.08164729285680945, 0.08164729285680945), new Grad4(0.8828161875373585, -0.4553054119602712, -0.08164729285680945, -0.08164729285680945), new Grad4(0.7504883828755602, -0.5029860367700724, -0.15296486218853164, 0.4004672082940195), new Grad4(0.7504883828755602, -0.5029860367700724, 0.4004672082940195, -0.15296486218853164), new Grad4(0.6740059517812944, -0.5794684678643381, 0.3239847771997537, 0.3239847771997537), new Grad4(0.5794684678643381, -0.3239847771997537, -0.6740059517812944, -0.3239847771997537), new Grad4(0.5029860367700724, -0.4004672082940195, -0.7504883828755602, 0.15296486218853164), new Grad4(0.5029860367700724, 0.15296486218853164, -0.7504883828755602, -0.4004672082940195), new Grad4(0.4553054119602712, 0.08164729285680945, -0.8828161875373585, 0.08164729285680945), new Grad4(0.8828161875373585, -0.08164729285680945, -0.4553054119602712, -0.08164729285680945), new Grad4(0.7504883828755602, -0.15296486218853164, -0.5029860367700724, 0.4004672082940195), new Grad4(0.7504883828755602, 0.4004672082940195, -0.5029860367700724, -0.15296486218853164), new Grad4(0.6740059517812944, 0.3239847771997537, -0.5794684678643381, 0.3239847771997537), new Grad4(0.5794684678643381, -0.3239847771997537, -0.3239847771997537, -0.6740059517812944), new Grad4(0.5029860367700724, -0.4004672082940195, 0.15296486218853164, -0.7504883828755602), new Grad4(0.5029860367700724, 0.15296486218853164, -0.4004672082940195, -0.7504883828755602), new Grad4(0.4553054119602712, 0.08164729285680945, 0.08164729285680945, -0.8828161875373585), new Grad4(0.8828161875373585, -0.08164729285680945, -0.08164729285680945, -0.4553054119602712), new Grad4(0.7504883828755602, -0.15296486218853164, 0.4004672082940195, -0.5029860367700724), new Grad4(0.7504883828755602, 0.4004672082940195, -0.15296486218853164, -0.5029860367700724), new Grad4(0.6740059517812944, 0.3239847771997537, 0.3239847771997537, -0.5794684678643381), new Grad4(0.03381941603233842, 0.03381941603233842, 0.03381941603233842, 0.9982828964265062), new Grad4(-0.044802370851755174, -0.044802370851755174, 0.508629699630796, 0.8586508742123365), new Grad4(-0.044802370851755174, 0.508629699630796, -0.044802370851755174, 0.8586508742123365), new Grad4(-0.12128480194602098, 0.4321472685365301, 0.4321472685365301, 0.7821684431180708), new Grad4(0.508629699630796, -0.044802370851755174, -0.044802370851755174, 0.8586508742123365), new Grad4(0.4321472685365301, -0.12128480194602098, 0.4321472685365301, 0.7821684431180708), new Grad4(0.4321472685365301, 0.4321472685365301, -0.12128480194602098, 0.7821684431180708), new Grad4(0.37968289875261624, 0.37968289875261624, 0.37968289875261624, 0.753341017856078), new Grad4(0.03381941603233842, 0.03381941603233842, 0.9982828964265062, 0.03381941603233842), new Grad4(-0.044802370851755174, 0.044802370851755174, 0.8586508742123365, 0.508629699630796), new Grad4(-0.044802370851755174, 0.508629699630796, 0.8586508742123365, -0.044802370851755174), new Grad4(-0.12128480194602098, 0.4321472685365301, 0.7821684431180708, 0.4321472685365301), new Grad4(0.508629699630796, -0.044802370851755174, 0.8586508742123365, -0.044802370851755174), new Grad4(0.4321472685365301, -0.12128480194602098, 0.7821684431180708, 0.4321472685365301), new Grad4(0.4321472685365301, 0.4321472685365301, 0.7821684431180708, -0.12128480194602098), new Grad4(0.37968289875261624, 0.37968289875261624, 0.753341017856078, 0.37968289875261624), new Grad4(0.03381941603233842, 0.9982828964265062, 0.03381941603233842, 0.03381941603233842), new Grad4(-0.044802370851755174, 0.8586508742123365, -0.044802370851755174, 0.508629699630796), new Grad4(-0.044802370851755174, 0.8586508742123365, 0.508629699630796, -0.044802370851755174), new Grad4(-0.12128480194602098, 0.7821684431180708, 0.4321472685365301, 0.4321472685365301), new Grad4(0.508629699630796, 0.8586508742123365, -0.044802370851755174, -0.044802370851755174), new Grad4(0.4321472685365301, 0.7821684431180708, -0.12128480194602098, 0.4321472685365301), new Grad4(0.4321472685365301, 0.7821684431180708, 0.4321472685365301, -0.12128480194602098), new Grad4(0.37968289875261624, 0.753341017856078, 0.37968289875261624, 0.37968289875261624), new Grad4(0.9982828964265062, 0.03381941603233842, 0.03381941603233842, 0.03381941603233842), new Grad4(0.8586508742123365, -0.044802370851755174, -0.044802370851755174, 0.508629699630796), new Grad4(0.8586508742123365, -0.044802370851755174, 0.508629699630796, -0.044802370851755174), new Grad4(0.7821684431180708, -0.12128480194602098, 0.4321472685365301, 0.4321472685365301), new Grad4(0.8586508742123365, 0.508629699630796, -0.044802370851755174, -0.044802370851755174), new Grad4(0.7821684431180708, 0.4321472685365301, -0.12128480194602098, 0.4321472685365301), new Grad4(0.7821684431180708, 0.4321472685365301, 0.4321472685365301, -0.12128480194602098), new Grad4(0.753341017856078, 0.37968289875261624, 0.37968289875261624, 0.37968289875261624) }; foreach (var t in grad4) { t.Dx /= N4; t.Dy /= N4; t.Dz /= N4; t.Dw /= N4; } for (var i = 0; i < Psize; i++) { Gradients4D[i] = grad4[i % grad4.Length]; } }