2017-03-09 1 views
0

일부 원을 시각화 할 수 있도록 MATLAB 코드를 작성했습니다. 아래 코드와 첨부 된 그림을 출력으로보십시오.MATLAB에서 겹쳐진 원을 제거하십시오.

clc; 
clear; 
close all; 

% X and Y of each Center 
Xloc = [1,2,3,4,5,1,2,3,4,5,1,2,3,4,5,1,2,3,4,5,1,2,3,4,5]; 
Yloc = [1,1,1,1,1,2,2,2,2,2,3,3,3,3,3,4,4,4,4,4,5,5,5,5,5]; 

% Radius of each circle 
radius = unifrnd(0,1,[1 numel(Xloc)]); 

% Random colours 
allColours = rand(numel(Xloc),3); 

% Transform the data into position = [left bottom width height] 
pos = [Xloc(:)-radius(:) Yloc(:)-radius(:) 2*radius(:)*[1 1]]; 

% Create and format the axes 
H = axes; 
hold on; 
axis equal; 
box on; 
set(H,'XTickLabel',[],'YTickLabel',[]); 

% Create the circles 
for idx = 1:numel(Xloc); 
    rectangle(... 
     'Position',pos(idx,:),... 
     'Curvature',[1 1],... 
     'FaceColor',allColours(idx,:),... 
     'EdgeColor','none'); 
end 

출력 도면은 (코드를 실행하면, 새로운 출력 대향 있도록 서클 '반경은, 무작위로 생성된다)이다

Circles

하면에서 볼 수 있듯이 그림, 서클 사이에 겹침이 있습니다. 서로를 겹치지 않게 센터를 서로 분리 할 수 ​​있고 동시에 서로 원래 거리 (또는 비슷한 거리)를 유지할 수 있는지 궁금합니다. [Xloc Yloc]

+0

반지름을 줄이십시오? –

+0

@AnderBiguri, 반경은 원의 퍼짐을 나타냅니다. 가장 높은 반경이 가장 중요한 원을 의미합니다. –

+0

나는 그 정보가 어떻게 도움이되는지 전혀 모릅니다. 당신은 서클을 가지고 있습니다. 당신은 그들의 위치를 ​​바꾸고 싶지 않습니다. 만지지 않기를 원합니다. 그 (것)들을 더 작게하는 것이 유일한 선택이다 –

답변

0

최적화 문제를 공식화하려고 할 수 있습니다. :

  • 원하는 반지름을 기준으로 센터 간의 최소 거리를 제한해야합니다.
  • 원하는 중심 위치의 편차를 최소화해야합니다.
+0

일부 원을 겹치지 않고 그릴 때 좋은 해결책이 될 수 없습니다. 가벼운 솔루션으로 해결할 수있을 것 같습니다. –

+0

구현하기가 어렵지는 않지만 원하는 방법을 자유롭게 사용할 수 있습니다. 이것은 단지 당신이 원하는 것을 공식화 할 수있는 가능성 일뿐입니다. – m7913d

관련 문제