Я пытаюсь создать N
случайные пары точек (N = 50) заданных расстояний, внутри шестиугольника 500
. Расстояние D, созданное с использованием (dmax - dmin).*rand(N,1) + dmin
, с dmin = 10
и dmax = 100
в Matlab. Я понимаю, что первым я должен создать набор точек ([x1 y1])
, которые имеют по крайней мере расстояние D
с главной границы шестиугольника, затем сгенерируют второй набор точек ([x2 y2])
, которые имеют точное расстояние D
от первого набора. Но когда-то у меня возникла проблема со второй точкой вне шестиугольника, потому что если первая позиция на границе гексаголя и плюс D
disance, то вторая позиция находится за пределами шестиугольника (я имею в виду, что я хочу создать случайную парную позицию внутри гексагона). Может ли кто-нибудь помочь мне в создании такого сценария и решить проблему? Благодарю.Как создать случайные позиции с расстоянием между ними внутри шестиугольника?
Например, как
R = 500; % hexagol radius
N = 50; % number pair positions
d_min = 10; % minimum distance
d_max = 100; % maximum distance
D = (d_max - d_min).*rand(N,1) + d_min; % randomly distance
X = [0,0]; % hexagol center
j=0;
while j < N
j=j+1;
theta(j)=2*pi*rand(1,1);
u= rand()+ rand();
if u < 1
r(j) = R * u;
else
r(j) = R * (2 - u);
end
% to create the first position
x1(j)=r(j)*cos(theta(j)) + X(1,1); % first x positions
y1(j)=r(j)*sin(theta(j)) + X(1,2); % first y positions
end
% to create the second position
x2(j) = x1(j) + D(j); % second x positions
y2(j) = y1(j) + D(j); % second y positions
Я понимаю вашу мысль, спасибо очень. Я скоро отправлю свой исходный код, с куском, который немного отличается от вас. Еще раз благодарю вас за помощь. – user3727281