Implementation
@override
double noise3(double x, double y, double z) {
List<double> box =
getScaleBoundsC3D4(x, y, z).map((e) => e.toDouble()).toList();
return tricubic(
input.noise3(box[X1_D4], box[Y1_D4], box[Z1_D4]),
input.noise3(box[X1_D4], box[Y2_D4], box[Z1_D4]),
input.noise3(box[X1_D4], box[Y3_D4], box[Z1_D4]),
input.noise3(box[X1_D4], box[Y4_D4], box[Z1_D4]),
input.noise3(box[X2_D4], box[Y1_D4], box[Z1_D4]),
input.noise3(box[X2_D4], box[Y2_D4], box[Z1_D4]),
input.noise3(box[X2_D4], box[Y3_D4], box[Z1_D4]),
input.noise3(box[X2_D4], box[Y4_D4], box[Z1_D4]),
input.noise3(box[X3_D4], box[Y1_D4], box[Z1_D4]),
input.noise3(box[X3_D4], box[Y2_D4], box[Z1_D4]),
input.noise3(box[X3_D4], box[Y3_D4], box[Z1_D4]),
input.noise3(box[X3_D4], box[Y4_D4], box[Z1_D4]),
input.noise3(box[X4_D4], box[Y1_D4], box[Z1_D4]),
input.noise3(box[X4_D4], box[Y2_D4], box[Z1_D4]),
input.noise3(box[X4_D4], box[Y3_D4], box[Z1_D4]),
input.noise3(box[X4_D4], box[Y4_D4], box[Z1_D4]),
input.noise3(box[X1_D4], box[Y1_D4], box[Z2_D4]),
input.noise3(box[X1_D4], box[Y2_D4], box[Z2_D4]),
input.noise3(box[X1_D4], box[Y3_D4], box[Z2_D4]),
input.noise3(box[X1_D4], box[Y4_D4], box[Z2_D4]),
input.noise3(box[X2_D4], box[Y1_D4], box[Z2_D4]),
input.noise3(box[X2_D4], box[Y2_D4], box[Z2_D4]),
input.noise3(box[X2_D4], box[Y3_D4], box[Z2_D4]),
input.noise3(box[X2_D4], box[Y4_D4], box[Z2_D4]),
input.noise3(box[X3_D4], box[Y1_D4], box[Z2_D4]),
input.noise3(box[X3_D4], box[Y2_D4], box[Z2_D4]),
input.noise3(box[X3_D4], box[Y3_D4], box[Z2_D4]),
input.noise3(box[X3_D4], box[Y4_D4], box[Z2_D4]),
input.noise3(box[X4_D4], box[Y1_D4], box[Z2_D4]),
input.noise3(box[X4_D4], box[Y2_D4], box[Z2_D4]),
input.noise3(box[X4_D4], box[Y3_D4], box[Z2_D4]),
input.noise3(box[X4_D4], box[Y4_D4], box[Z2_D4]),
input.noise3(box[X1_D4], box[Y1_D4], box[Z3_D4]),
input.noise3(box[X1_D4], box[Y2_D4], box[Z3_D4]),
input.noise3(box[X1_D4], box[Y3_D4], box[Z3_D4]),
input.noise3(box[X1_D4], box[Y4_D4], box[Z3_D4]),
input.noise3(box[X2_D4], box[Y1_D4], box[Z3_D4]),
input.noise3(box[X2_D4], box[Y2_D4], box[Z3_D4]),
input.noise3(box[X2_D4], box[Y3_D4], box[Z3_D4]),
input.noise3(box[X2_D4], box[Y4_D4], box[Z3_D4]),
input.noise3(box[X3_D4], box[Y1_D4], box[Z3_D4]),
input.noise3(box[X3_D4], box[Y2_D4], box[Z3_D4]),
input.noise3(box[X3_D4], box[Y3_D4], box[Z3_D4]),
input.noise3(box[X3_D4], box[Y4_D4], box[Z3_D4]),
input.noise3(box[X4_D4], box[Y1_D4], box[Z3_D4]),
input.noise3(box[X4_D4], box[Y2_D4], box[Z3_D4]),
input.noise3(box[X4_D4], box[Y3_D4], box[Z3_D4]),
input.noise3(box[X4_D4], box[Y4_D4], box[Z3_D4]),
input.noise3(box[X1_D4], box[Y1_D4], box[Z4_D4]),
input.noise3(box[X1_D4], box[Y2_D4], box[Z4_D4]),
input.noise3(box[X1_D4], box[Y3_D4], box[Z4_D4]),
input.noise3(box[X1_D4], box[Y4_D4], box[Z4_D4]),
input.noise3(box[X2_D4], box[Y1_D4], box[Z4_D4]),
input.noise3(box[X2_D4], box[Y2_D4], box[Z4_D4]),
input.noise3(box[X2_D4], box[Y3_D4], box[Z4_D4]),
input.noise3(box[X2_D4], box[Y4_D4], box[Z4_D4]),
input.noise3(box[X3_D4], box[Y1_D4], box[Z4_D4]),
input.noise3(box[X3_D4], box[Y2_D4], box[Z4_D4]),
input.noise3(box[X3_D4], box[Y3_D4], box[Z4_D4]),
input.noise3(box[X3_D4], box[Y4_D4], box[Z4_D4]),
input.noise3(box[X4_D4], box[Y1_D4], box[Z4_D4]),
input.noise3(box[X4_D4], box[Y2_D4], box[Z4_D4]),
input.noise3(box[X4_D4], box[Y3_D4], box[Z4_D4]),
input.noise3(box[X4_D4], box[Y4_D4], box[Z4_D4]),
normalize(box[X2_D4], box[X3_D4], x),
normalize(box[Y2_D4], box[Y3_D4], y),
normalize(box[Z2_D4], box[Z3_D4], z));
}