private static double Dot(Grad g, double x, double y, double z) { return g.X * x + g.Y * y + g.Z * z; }
private static double Dot(Grad g, double x, double y, double z, double w) { return g.X * x + g.Y * y + g.Z * z + g.W * w; }
private static double Dot(Grad g, double x, double y) { return g.X * x + g.Y * y; }