2017-03-09 207 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