> A = -0.5 * Math.Sqrt( (R1+R2-D) * (R1-R2+D) * (-R1+R2+D) * (R1+R2+D) ) That forumla is certainly wrong. The area results negative. numerically you can solve it by numerical integration. use the line that passes through both circle centers as ordinate axis and integrate each circle's 'banana' area, on the domain R*cos(A/2) to R, then add the two results. A is the center angle that subtends the intersection points on the circle, for each circle (you did not say identical radii). if D is the distance between the center points and R1, R2 are the radii, and D <= R1+R2, then you can determine A/2, for each circle, using the cosine theorem applied in the triange D,R1,R2, i.e.: R2^2 = R1^2 + D^2 - 2*R1*D*cos(A1/2) -> cos(A1/2) = 1/2 * (D^2 + R1^2 - R2^2) / (R1 * D) ... R1 * cos(A1/2) = 1/2 * (D + (R1^2 - R2^2) / D) ... R2 * cos(A2/2) = 1/2 * (D + (R2^2 - R1^2) / D) so for circle with R1 you integrate on the domain R1*cos(A1/2) to R1, and for circle with R2 on R1*cos(A2/2) to R2 and add the sums. Note that we do not need any trig operations (cos(Ax/2) need never be solved for Ax). The circle equation is (in a form suitable for integer-only calculations): x^2 + y^2 = R^2 y = +/- sqrt(R^2 - x^2) which for integration purposes becomes (remember sqrt output is +/- and we want both halves): y = 2 * sqrt(R^2 - x^2) so your integral sum should be (in a form computable by a pic): // D, R1 and R2 must be positive integers, D <= R1+R2 // you supply sqrt() such that it works on a domain from 1 to // max(R1^2,R2^2), with integer input and output int i, Area; Area = 0; for(i = 1/2 * (D + (R1^2 - R2^2) / D); i < R1; ++i) Area += 2 * sqrt(R1^2 - i^2); for(i = 1/2 * (D + (R2^2 - R1^2) / D); i < R2; ++i) Area += 2 * sqrt(R2^2 - i^2); return(Area); // done barring any errrors (code not tested). The accuracy of the integration will increase significantly by using a different method than the summed squares method. But do you need accurate ? i.e. compute the area of the floor of your funny-shaped swimming pool to the nearest square micron and round up by 5% to account for losses in brush soak and empty paint cans ? Note that the input to sqrt() above is always the square of an integer or a difference of such squares. This leads to implementation shortcuts. Peter -- http://www.piclist.com hint: The list server can filter out subtopics (like ads or off topics) for you. See http://www.piclist.com/#topics