gradCoord4D function
Implementation
@pragma('vm:prefer-inline')
double gradCoord4D(
int seed,
int x,
int y,
int z,
int w,
double xd,
double yd,
double zd,
double wd,
) {
IntX hash = Int32(seed);
hash ^= _xPrime * x;
hash ^= _yPrime * y;
hash ^= _zPrime * z;
hash ^= _wPrime * w;
hash = hash * hash * hash * 60493;
hash = (hash >> 13) ^ hash;
hash &= 31;
var a = yd;
var b = zd;
var c = wd;
switch (hash.toInt() >> 3) {
case 1:
a = wd;
b = xd;
c = yd;
break; // W,X,Y
case 2:
a = zd;
b = wd;
c = xd;
break; // Z,W,X
case 3:
a = yd;
b = zd;
c = wd;
break; // Y,Z,W
}
return ((hash & 4).toInt() == 0 ? -a : a) +
((hash & 2).toInt() == 0 ? -b : b) +
((hash & 1).toInt() == 0 ? -c : c);
}