2段階アプローチで問題に対処できます。あなた
- はランダムに最初のポイントを生成することができ、その後、あなたはすべての点は、その円の意志に横たわって、その中心と半径あなたが円を描くやったら
D
- での距離であり、その点がある円を考慮することができます以前に作成した最初のポイントからの距離
D
を持っており、これらの候補の一つをランダムに選択することにより、あなたは第二の点
はのは、例を見てみましょう必要があります:のはメイン円は半径200
ANを持っているあなたを言わせてその中心は(0,0)
なので、主な変数を宣言することから始めます。 ( - 私はあなたが一点内部たくない数えるとメイン円の他の外そのペアのポイントと一緒に)
MAINCENTER_x=0;
MAINCENTER_y=0;
MAINRADIUS=200;
は今度は最初の距離、D(1)=10.5
を考えると、私たちは今、最初のランダム点を生成しますメイン円
r=D(1); % let's concentrate on the first distance
while true
x=((MAINRADIUS-2*r) - (-MAINRADIUS+2*r))*rand(1,1) + (-MAINRADIUS+2*r);
y=((MAINRADIUS-2*r) - (-MAINRADIUS+2*r))*rand(1,1) + (-MAINRADIUS+2*r);
if x^2+y^2<=(MAINRADIUS-2*r)^2
break;
end
end
と、このループx
とy
の終わりに私たちの最初の点の座標になります内にある必要があります。
ここでは、すべての近隣ノードを生成し、ペアの2番目の候補となる候補をいくつか作成します。前述のように、これらの候補は、中心が(x,y)
であり、半径がD(1)=10.5
である円上にあるポイントになります。次のように私たちは、これらの候補を作成することができます。
% declare angular spacing
ang=0:0.01:2*pi;
% build neighbour points
xp=r*cos(ang)+x;
yp=r*sin(ang)+y;
今
xp
とyp
含む2つのベクトルがあり、それぞれ、x座標と私たちの候補者のy座標は、したがって、私たちは今、ランダムにこれら
のいずれかを選択しなければなら
% second point
idx=randsample(1:length(xp),1);
secondPoint_x=xp(idx);
secondPoint_y=yp(idx);
最後に、(x,y)
のペアが最初のポイントになり、(secondPoint_x, secondPoint_y)
のペアが2番目のポイントになります。次のプロットは、これらの手順を要約役立ちます 赤い円がメイン領域(中心(0,0)と半径200)であり、赤いアスタリスクは、最初のポイント(x,y)
青色少し円は中心(x,y)
と半径10.5
を有し最後に、黒のアスタリスクは、青の小さな円の上に横たわる候補の中からランダムに抽出された(secondPoint_x, secondPoint_y)
のペアの2番目のポイントです。
D
のすべての要素に対して同じプロセスを繰り返すか、またはD
のすべての要素を反復せずに全く同じことをする次のコードを使用する必要があります。
MAINCENTER_x=0;
MAINCENTER_y=0;
MAINRADIUS=200;
D = [10.5 44.8 30.01 37.2 23.4 49.1];
% generate random point coordinates
while true
x=((MAINRADIUS-2*D) - (-MAINRADIUS+2*D)).*rand(1,6) + (-MAINRADIUS+2*D);
y=((MAINRADIUS-2*D) - (-MAINRADIUS+2*D)).*rand(1,6) + (-MAINRADIUS+2*D);
if all(x.^2+y.^2<=(MAINRADIUS-2*D).^2)
break;
end
end
% declare angular spacing
ang=0:0.01:2*pi;
% build neighbour points
xp=bsxfun(@plus, (D'*cos(ang)),x');
yp=bsxfun(@plus, (D'*sin(ang)),y');
% second points
idx=randsample(1:size(xp,2),length(D));
secondPoint_x=diag(xp(1:length(D),idx));
secondPoint_y=diag(yp(1:length(D),idx));
%plot
figure(1);
plot(MAINRADIUS*cos(ang)+MAINCENTER_x,MAINRADIUS*sin(ang)+MAINCENTER_y,'r'); %main circle
hold on; plot(xp',yp'); % neighbours circles
hold on; plot(x,y,'r*'); % first points (red asterisks)
hold on; plot(secondPoint_x,secondPoint_y,'k*'); %second points (black asterisks)
axis equal;
今x
とy
(及びsecondPoint_x
ひいてはsecondPoint_y
)は、長さ6のベクトルとなり、i番目の要素がi番目X(又はである(図6は距離があるため) y)成分の第1(または第2)点に対する成分である。
はそうあなたが与えられた' A'と 'B'を取得したいですか? –