如何减去单位平方外的椭圆面积?

时间:2014-06-25 04:35:56

标签: matlab ellipse

我已经将单位正方形定义为matlab代码中的一个区域,并且我创建了随机大小的椭圆,所有这些都以单位正方形为中心。

然而,仅仅因为它们以单位正方形为中心并不意味着它们的所有区域都在单位正方形内。

我只想考虑单位平方内的区域,所以我计算了每个随机生成的椭圆的总面积,但是我不知道如何减去单位平方之外的区域。 / p>

以下是我的代码中创建省略号并计算其区域的部分:

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 个答案:

答案 0 :(得分:2)

近似交叉区域的一种方法是通过单位区域的离散化。 我们假设每个椭圆由四个参数x0y0ab表示,以便

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越小,估计就越准确,代价是内存消耗和运行时间。