generate uniformly distributed points inside a hexagon

조회 수: 12 (최근 30일)
Nadir
Nadir 2012년 3월 27일
편집: Bruno Luong 2023년 3월 18일
am trying to generate uniformly distributed points inside a hexagon, but am stuck can any one help???

채택된 답변

SHUBHANGI VISHWAKARMA
SHUBHANGI VISHWAKARMA 2015년 1월 6일
편집: Walter Roberson 2018년 8월 18일
%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
Image Analyst
Image Analyst 2018년 10월 7일
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 2018년 10월 10일
Thank you peeps! but im getting ''index exceeds matrix dimensions'' for the line c_x= c_x(idx(1:N));

댓글을 달려면 로그인하십시오.

추가 답변 (1개)

Bruno Luong
Bruno Luong 2018년 10월 8일
편집: Bruno Luong 2023년 3월 18일
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
Amar Patra
Amar Patra 2018년 10월 23일
Thank you so much Bruno!
Omar Allahham
Omar Allahham 2023년 3월 18일
hi bruno
if I want to make the points move randomly and continuously in this hexagonal what should i do?

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 Random Number Generation에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by