Re: how to get the area of circles
- To: mathgroup at smc.vnet.net
- Subject: [mg74803] Re: how to get the area of circles
- From: "Valeri Astanoff" <astanoff at gmail.com>
- Date: Thu, 5 Apr 2007 04:19:00 -0400 (EDT)
- References: <euvlho$b9n$1@smc.vnet.net>
On 4 avr, 09:53, "doufunao" <gaoshan2... at gmail.com> wrote:
> hi guys,
>
> I'm working on a project. I need to calculate the area of many circles
> in a 2D space which may overlap each other.
> It's quite complicated. I am not sure whether mathematica can do this.
> Is there any software/lib/package available already?
> thanks.
Good day,
Here is a solution using "Boole" :
In[1]:=
areaOfCircles[circles_List(*{{a1,b1,r1},{a2,b2,r2}...}*)]:=
Module[{},
ixmin = Ordering[circles,1,#1[[1]] < #2[[1]]&]//First;
xmin = circles[[ixmin,1]]-circles[[ixmin,3]];
ixmax = Ordering[circles,1,#1[[1]] > #2[[1]]&]//First;
xmax = circles[[ixmax,1]]+circles[[ixmax,3]];
iymin = Ordering[circles,1,#1[[2]] < #2[[2]]&]//First;
ymin = circles[[iymin,2]]-circles[[iymin,3]];
iymax = Ordering[circles,1,#1[[2]] > #2[[2]]&]//First;
ymax = circles[[iymax,2]]+circles[[iymax,3]];
insideQ[{x_,y_},{a_,b_,r_}] := (x-a)^2+(y-b)^2 < r^2;
NIntegrate[Boole[Or@@(insideQ[{x,y},#]& /@ circles)],
{x,xmin,xmax},{y,ymin,ymax}]
];
In[2]:=circles={{-.5,1.5,9.7},{-1.8,4.3,5.8},
{3.5,4.0,1.7},{2.1,1.7,3.1},{1.4,5.9,1.9}};
In[3]:=areaOfCircles[circles]//Timing
Out[3]={0.078Second,194.654}
V.Astanoff