8

I have two circles, like this:

enter image description here


I know the radii of the circles, and I know the X + Y of the center of both circles.

Can I get the size of the area that is black in my picture?

Pedja
  • 12,883
Lolmewn
  • 183
  • 2
    I've tried asking a Math and a Physics teacher, they both didn't know ^^ – Lolmewn Jan 10 '12 at 11:48
  • 2
    Google finds this: http://mathworld.wolfram.com/Circle-CircleIntersection.html – lhf Jan 10 '12 at 11:52
  • 1
    Oh my, that looks crazy complicated. Isn't there an easier way to do this? – Lolmewn Jan 10 '12 at 11:54
  • 4
    Do you mean easier to understand or easier to implement? Because equation 14 is pretty easy to implement. Just code up the expression and don't think about it too much. :) (And for what it's worth, I wouldn't hold out hope for a simpler formula. Areas of intersections tend to have complicated closed forms.) –  Jan 10 '12 at 12:12
  • Alright, thanks. Should I post it as an answer now? (I suppose I should) – Lolmewn Jan 10 '12 at 13:33
  • If I were you, I'd ping @lhf and see if they want to post the answer first. And I just did. :) –  Jan 10 '12 at 14:37
  • The solution on mathworld only works if the y coordinate of the centers is the same so in order to generalize it you have to set 1 circle to be at (0,0) and the second circle at position (Distance between centers,0). This essentially transforms the more complicated problem into one that this equation can solve. – RobCurr Jun 24 '16 at 18:00

2 Answers2

6

This link helped me out in this situation. The MathWorld version is very descriptive, but I think the above link explains what is going on more clearly. I created a javascript function for this purpose, given below in case it is useful to anyone else.

function areaOfIntersection(x0, y0, r0, x1, y1, r1)
{
  var rr0 = r0*r0;
  var rr1 = r1*r1;
  var c = Math.sqrt((x1-x0)*(x1-x0) + (y1-y0)*(y1-y0));
  var phi = (Math.acos((rr0+(c*c)-rr1) / (2*r0*c)))*2;
  var theta = (Math.acos((rr1+(c*c)-rr0) / (2*r1*c)))*2;
  var area1 = 0.5*theta*rr1 - 0.5*rr1*Math.sin(theta);
  var area2 = 0.5*phi*rr0 - 0.5*rr0*Math.sin(phi);
  return area1 + area2;
}
Glorfindel
  • 3,955
5

A formula for the area is worked out in Circle-Circle Intersection at Wolfram MathWorld: $$ A = r^{2}\cos^{-1}\left(\frac{d^{2}+r^{2}-R^{2}}{2dr}\right) + R^{2}\cos^{-1}\left(\frac{d^{2}+R^{2}-r^{2}}{2dR}\right) - \frac12 \sqrt{(-d+r+R)(d+r-R)(d-r+R)(d+r+R)} $$ where $r$ and $R$ are the radii and $d$ is the distance between the centres.

lhf
  • 216,483