2014-06-25 44 views
3

我已經將單位正方形定義爲matlab代碼中的一個區域,並且我創建了隨機大小的橢圓,均以單位正方形爲中心。如何減去單位正方形外部的橢圓面積?

但是,僅僅因爲它們以單位正方形爲中心並不意味着它們的所有區域都在單位正方形內。

我想只考慮單位平方內的區域,所以我計算了每個隨機生成的橢圓的總面積,但我不知道如何減去單位平方以外的面積。

這裏是我的代碼創建的省略號,並計算它們的面積部分:

a = rand(16,1); 
totarea = zeros(1,16); 

for i = 1:4:16 

ellipse(a(i)/2,a(i+1)/2,a(i+2),a(i+3)) 
totarea(i) = pi*a(i)*a(i+1)/4; 

end 

b = find(totarea > 0); 
totarea = totarea(b); 

這裏是我所生成的內容中的照片:

大廣場是單位正方形。在那個廣場的內部是我感興趣的區域。正如你看到的那樣,生成的橢圓覆蓋了這個廣場。我想找到位於正方形內部的每個橢圓的區域。

我上面生成的代碼允許我計算每個橢圓的總面積,但是我需要減去在正方形外發生的橢圓的面積,我不確定如何編寫代碼去做。

+1

不確定你的意思。你能提供一些你想要做的事情的圖形/插圖(或鏈接到一個)。 – Marcin

+0

我更新了帖子以包含一個更詳細的解釋數字 – user132039

+0

首先爲什麼你的函數'ellipse'需要四個輸入?通常一個橢圓由兩個變量定義......那麼你是如何定義「單位平方」的?你可以做些什麼來獲得這些橢圓的面積是:你可以說每個像素等於你希望使用的單位x cm/mm/inch。然後,您可以計算橢圓內和「單位平方」內的像素數。這不會導致確切的區域,但會導致實際的數據。查看[「Riemann彙總」](http://en.wikipedia.org/wiki/Riemann_integral)。 –

回答

2

單程交叉口面積是通過在單位面積上的離散化。 假設每個橢圓由四個參數x0y0a並代表b這樣

el(x0, y0, a, b): ((x-x0)/a)^2 + ((y-y0)/b)^2 <= 1 

現在我們可以估算

h = 1e-3; % discretization accuracy 
[x y] = meshgrid(0:h:1, 0:h:1); % discretizing the unit square 
el = ((x-x0)/a).^2 + ((y-y0)/b).^2 <= 1; % set all points of ellipse that are inside 
intersect_area = sum(el(:)) * h * h; 

你挑h更準確的估計會是較小的,以內存消耗和運行時間爲代價。

+0

+1。一個問題,但。爲什麼你在最後的求和中將'h'放在一起?爲什麼不只是繁殖?我有一個想法,但我並不確定。 – kkuilla

+0

@kkuilla'h^2'是單個像素w.r.t的區域。單位正方形。 – Shai

+0

非常感謝你!這正是我期待的! (: – user132039