두 단계 접근법을 사용하여 문제를 해결할 수 있습니다. 당신은
- 무작위로 첫 번째 점을 생성 할 수 있습니다 그리고 당신은 그 중심이 지점이며 반지름 당신이 원을 그리 않았다 일단
D
- 의 거리이며, 모든 지점이 그 원에 누워 원을 고려할 수있는 것 당신이
이의이 예제를 보자 두 번째 지점을해야 거리 D
이전에 만든 첫 번째 점에서 이들 후보 중 하나의 무작위 선택에 의해 한 : 이제 주요 원 반경 200
을 가지고 당신을 가정 해 봅시다 그 중심은 (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
의 끝에서 거짓말을해야합니다.
이제 우리는 모든 이웃을 생성 할 것이고, 따라서 몇 개의 후보가 그 쌍의 두 번째 지점이 될 것입니다. 이전에 말했듯이,이 후보자는 중심이 (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
포함 두 벡터가 각각 x 좌표와 우리 후보의 y 좌표, 따라서 우리는 지금 무작위이
중 하나를 선택해야
% second point
idx=randsample(1:length(xp),1);
secondPoint_x=xp(idx);
secondPoint_y=yp(idx);
마지막으로 (x,y)
쌍이 첫 번째 지점이고 (secondPoint_x, secondPoint_y)
쌍이 두 번째 지점입니다. 다음 플롯은 이러한 단계를 요약하는 데 도움이됩니다. 빨간색 원은 주 영역 (중심은 (0,0) 및 반경 200)이고 빨간색 별표는 첫 번째 점 (x,y)
파란색 작은 원은 가운데가 (x,y)
이고 반경이 10.5
이고 마침내 검은 별표는 파란색의 작은 원에있는 후보들 사이에서 임의로 추출 된 (secondPoint_x, secondPoint_y)
쌍의 두 번째 지점입니다.
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) 구성 요소의 첫 번째 (또는 두 번째) 점입니다.
그래서 당신은 주어진'A'와'b'를 얻을시겠습니까? –