Re: how to get the area of circles
- To: mathgroup at smc.vnet.net
- Subject: [mg74779] Re: [mg74751] how to get the area of circles
- From: Darren Glosemeyer <darreng at wolfram.com>
- Date: Thu, 5 Apr 2007 04:06:40 -0400 (EDT)
- References: <200704040753.DAA11559@smc.vnet.net>
doufunao 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. > > One possibility is to define an indicator function which is 1 for a point that is inside of any of the circles and 0 otherwise and then integrate over a region that contains all of the circles. The value of the integral will be the area. This can be accomplished using Boole, which is 1 when it's argument is True and 0 when it's argument is False, and NIntegrate. Here is an example. First, we define a function randomCircle that will give the inequality for a circle of some random radius centered at some random point. The arguments define the ranges for the random values. In[1]:= randomCircle[xrange_, yrange_, rrange_] := (x - Random[Real, xrange])^2 + (y - Random[Real, yrange])^2 <= Random[Real, rrange] Here is an example circle with center coordinates and radius value all between 1 and 3. In[2]:= randomCircle[{1, 3}, {1, 3}, {1, 3}] // InputForm Out[2]//InputForm= (-2.0661317251902482 + x)^2 + (-1.6104274337228972 + y)^2 <= 1.4140906260268187 The following will give a list of circle inequalities with center coordinates and radius between 0 and 5. In[3]:= fivecircles = Table[randomCircle[{0, 5}, {0, 5}, {0, 5}], {5}]; By applying Or to the list fivecircles, we have the condition for being in at least one of the circles. The indicator function will then be Boole of that expression. In[4]:= InputForm[indicator = Boole[Apply[Or, fivecircles]]] Out[4]//InputForm= Boole[(-3.3731865816952618 + x)^2 + (-4.955490782699668 + y)^2 <= 3.8131091026269477 || (-1.8516457967846403 + x)^2 + (-0.38266240446865113 + y)^2 <= 0.42049688102669647 || (-2.082030985785312 + x)^2 + (-1.5497542909564879 + y)^2 <= 4.623641160034157 || (-3.140716303429742 + x)^2 + (-1.1690455292870399 + y)^2 <= 1.3477273176024342 || (-4.139078714591639 + x)^2 + (-0.6079159508633709 + y)^2 <= 2.1205909039189836] For these particular circles, integrating from -5 to 10 for both x and y will be sufficient to cover the circles. In[5]:= NIntegrate[indicator, {x, -5, 10}, {y, -5, 10}] // Chop Out[5]= 30.0377 Darren Glosemeyer Wolfram Research
- References:
- how to get the area of circles
- From: "doufunao" <gaoshan2002@gmail.com>
- how to get the area of circles