generate uniformly distributed points inside a hexagon

9 visualizaciones (últimos 30 días)
Nadir
Nadir el 27 de Mzo. de 2012
Editada: Bruno Luong el 18 de Mzo. de 2023
am trying to generate uniformly distributed points inside a hexagon, but am stuck can any one help???

Respuesta aceptada

SHUBHANGI VISHWAKARMA
SHUBHANGI VISHWAKARMA el 6 de En. de 2015
Editada: Walter Roberson el 18 de Ag. de 2018
%In the code, I will create a hexagon centered at (0,0) with radius R. The snipplets can be used in mobile capacity predicts and general systems level simulation of cellular networks.
N = 400; %Number of users
R = 10; %Radius of Hexagon
%Define the vertexes of the hexagon. They for angles 0, 60, 120, 180, 240 and 300 withe origin.
%Vertexes
v_x = R * cos((0:6)*pi/3);
v_y = R * sin((0:6)*pi/3);
%The method used here is to generate many points in a square and choose N points that fall within the hexagon
%Generate 3N random points with square that is 2R by 2R
c_x = R-rand(1, 3*N)*2*R;
c_y = R-rand(1, 3*N)*2*R;
%There is a command in MATLAB inploygon.
%The command finds points within a polygon region.
%get the points within the polygon
IN = inpolygon(c_x, c_y, v_x, v_y);
%drop nodes outside the hexagon
c_x = c_x(IN);
c_y = c_y(IN);
%choose only N points
idx = randperm(length(c_x));
c_x = c_x(idx(1:N));
c_y = c_y(idx(1:N));
plot(c_x, c_y, 'r*');
hold on;
plot(v_x,v_y);
axis square;
hold off
[EDITED, code formatted, Jan]
  7 comentarios
Image Analyst
Image Analyst el 7 de Oct. de 2018
Note: The code gives uniformly randomly distributed points, NOT uniformly distributed (like a grid or hexagonal honeycomb array) like the question asked for, where no randomness was mentioned. There IS a difference.
Mystery Mystery
Mystery Mystery el 10 de Oct. de 2018
Thank you peeps! but im getting ''index exceeds matrix dimensions'' for the line c_x= c_x(idx(1:N));

Iniciar sesión para comentar.

Más respuestas (1)

Bruno Luong
Bruno Luong el 8 de Oct. de 2018
Editada: Bruno Luong el 18 de Mzo. de 2023
Here is a generating method without rejection
R = 3;
centerx = 3;
centery = 7;
n = 10000;
% Generate uniform points in the simplex
% convex combination of 3points in R^3: (1,0,0) (0,1,0) (0,0,1)
m = 3;
X = rand(m-1,n) .^ (1./(m-1:-1:1)'); % use bsxfun(@power,...) for old release
X = cumprod([ones(1,n);X]).*[ones(m,n)-[X;zeros(1,n)]];
% use X as a barycentric of the triangle (0,1,z6) in the complex plane
% so point Z is uniform in this triangle
z6 = exp(2i*pi/6);
Z = [0, 1, z6]*X;
% multiply by random 6th-roots of 1 to map into unit hexagonal
Z = Z .* (z6.^floor(6*rand(1,n)));
% shift and scale
x = centerx+R*real(Z);
y = centery+R*imag(Z);
plot(x,y,'.')
axis equal
  6 comentarios
Amar Patra
Amar Patra el 23 de Oct. de 2018
Thank you so much Bruno!
Omar Allahham
Omar Allahham el 18 de Mzo. de 2023
hi bruno
if I want to make the points move randomly and continuously in this hexagonal what should i do?

Iniciar sesión para comentar.

Categorías

Más información sobre Random Number Generation en Help Center y File Exchange.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by