長径0.5m、短径0.2mの楕円をちょうど重ならないようにランダムに配置するプログラムを組みたいです。
円径の場合には次のように書けると思うのですがの、出来ればこれを楕円の場合にも適応させたいと考えております。
円の場合のプログラムでは
円の中心をランダム位置に発生
↓
ランダム点同士の距離の比較を行い直径以下になるまでこれを繰り返す
↓
比較試行数の限界を迎えるか、発生させたい円の数を満たすと終了する
といった流れになっております。
比較部分でどうにか工夫ができればと考えているので実コードでなくてもアイデアのみでも頂ければありがたいです。
よろしくお願いいたします。
MATLAB
1 2a= 10;%発生させたい範囲 3n_a=50;%発生させたい円の個数 4c_th=1000;%比較限界 5w = 0.5;%円直径 6%long_axis=0.25; %楕円の半径を想定 7%short_axis=0.1; %楕円の半径を想定 8 9for i = 1:n_a 10 11 c = 0; 12 while 1 13 flag = 0; 14 u(i,1) = a * (rand - 0.5); % 円中心位置x 15 u(i,2) = a * (rand - 0.5); % 円中心位置y 16 %u(i,3) = pi * (2 * rand - 1); %楕円の場合の角度を想定 17 18 19 for k = 1:i-1 20 % 21 if norm(u(k,1:2) - u(i,1:2)) < w %距離の比較 22 flag = 1; 23 c = c + 1; 24 break 25 end 26 end 27 if c > c_th 28 break 29 elseif flag == 1 30 continue 31 end 32 break 33 end 34 if c > c_th 35 msg = 'Too crowded to evaluate :('; 36 error(msg) 37 end 38end
あなたの回答
tips
プレビュー