MATLAB: How to distribute points uniformly through the grid of multiple hexagons

hexagonal griduniform distribution

Hi all, I have the following code to draw hexagonal grid.
Rad3Over2 = sqrt(3) / 2;
[X Y] = meshgrid(-.2:0.2:1.6);
n = size(X,1);
X = Rad3Over2 * X;
Y = Y + repmat([0 0.5],[n,n/2]);
% Plot the hexagonal mesh, including cell borders
[XV YV] = voronoi(X(:),Y(:)); plot(XV,YV,'b-')
axis equal, axis([.2 1.2 .2 1]), zoom on
My question is:
How to distribute uniform number of points into each hexagonal (for example, 4 points into each hexagonal)?
Thanks in advance.

Best Answer

You can do this for each hexagon:
  1. Get the coordinates of the surrounding square (not rectangle) with the side length L.
  2. Choose coordinates randomly using L * rand(1, 2) and reject points, which are outside the hexagon. If the point is inside, store the coordinates.
  3. Proceed with step 2. until you have the wanted number of points.
Two examples for code:
For a constructive method without rejection see John D'Errico excellent instructions: https://www.mathworks.com/matlabcentral/answers/327990-generate-random-coordinates-inside-a-convex-polytope