【问题标题】:How to subtract the area of an ellipse outside of the unit square?如何减去单位正方形之外的椭圆面积?
【发布时间】:2014-06-25 04:35:55
【问题描述】:

我在 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);

这是我生成的照片:

大正方形是单位正方形。该正方形的内部是我感兴趣的区域。如您所见,生成了覆盖该正方形的椭圆。我想找到正方形内每个椭圆的面积。

我上面生成的代码允许我计算每个椭圆的总面积,但是我需要减去出现在正方形之外的椭圆的面积,我不知道如何编写可以做到的代码那个。

【问题讨论】:

  • 不确定你的意思。您能否提供一些您正在尝试做的事情的图表/插图(或链接)。
  • 我更新了帖子以包含更详细解释的图
  • 首先为什么你的函数ellipse 需要四个输入?通常一个椭圆是由两个变量定义的......那么你是如何定义“单位正方形”的?要获得这些椭圆的面积,您可以做的是:您可以说每个像素等于 x cm/mm/inch 您想要使用的任何单位。然后你可以计算椭圆内和“单位正方形”内的像素数。这不会产生确切的区域,但会产生真实的数据。查看"Riemann sums"。

标签: matlab ellipse


【解决方案1】:

近似交叉区域的一种方法是对单位区域进行离散化。 假设每个椭圆由四个参数x0、y0、a 和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 越小,您的估计就越准确,但会消耗内存和运行时间。

【讨论】:

  • +1。一个问题。为什么你在最后的求和中平方h?为什么不只是乘法?我知道为什么,但我不太确定。
  • @kkuilla h^2 是单个像素 w.r.t 的面积。单位平方。
  • 非常感谢!这正是我想要的! (:
猜你喜欢
  • 2017-03-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-07
  • 1970-01-01
  • 2021-11-19
  • 2014-01-03
相关资源
最近更新 更多