Generates artificial clumped data in two dimensions using (radial) 2D Gaussian distributions. Takes as input

number of clusters (int)

edge length (double) the size of the square that clusters will be placed in

number of points (int) - the total number of points to generate. If a generated point lies to the right of (EdgeLength,0) or above (EdgedLength,0) it is not returned.

standard deviation (double) the radial standard deviation of the the clusters

The cluster centers are picked uniformly at random from within the square. Then, we for each point, with pick from the clusters uniformly at random, then draw from the distribution of that cluster, returning the result if it is within the square.