singlePerlin2 method

double singlePerlin2(
  1. int seed,
  2. double x,
  3. double y
)

Implementation

double singlePerlin2(int seed, double x, double y) {
  final x0 = x.floor();
  final y0 = y.floor();
  final x1 = x0 + 1;
  final y1 = y0 + 1;
  double xs;
  double ys;

  switch (interp) {
    case Interp.linear:
      xs = x - x0;
      ys = y - y0;
      break;
    case Interp.hermite:
      xs = (x - x0).interpHermiteFunc;
      ys = (y - y0).interpHermiteFunc;
      break;
    case Interp.quintic:
      xs = (x - x0).interpQuinticFunc;
      ys = (y - y0).interpQuinticFunc;
      break;
  }

  final xd0 = x - x0;
  final yd0 = y - y0;
  final xd1 = xd0 - 1;
  final yd1 = yd0 - 1;

  return ys.lerp(
    xs.lerp(
      gradCoord2D(seed, x0, y0, xd0, yd0),
      gradCoord2D(seed, x1, y0, xd1, yd0),
    ),
    xs.lerp(
      gradCoord2D(seed, x0, y1, xd0, yd1),
      gradCoord2D(seed, x1, y1, xd1, yd1),
    ),
  );
}