Your red and green circles show two different cases. In the title you said intersection and the green one seems to show that. However the red one simply shows the tangents to the circle, so simply the angular size as seen from the center. Your second image also seem to suggest that you want to know the angular size of the circle. Is that right? If not you should clarify what you mean by intersection.

If you mean that when the circle center is inside the big circle you want to get half of the angular size of the circle and when the center is outside the big circle you only want to know the length of the intersection cord?

Well, the first case is the simplest one as you just need some trig identity. Specifically

```
sin(a) = rE / |CE|
```

So “rE” is the radius of the small circle while “|CE|” is simply the distance from C to E. So take the “Asin” from the result and you get the angle

```
float angRad = Mathf.Asin(rE / (E-C).magnitude);
```

This will give you the angle in radian assuming rE is a float indicating the radius and C and E are the position vectors.

As for the second case, that’s more complicated, but not too difficult. Though I currently don’t have time to think it through ^^. Maybe someone else has the time. Of course you have a limit at `|CE| > rC + rE`

because at this point the circle E would be completely outside the big circle and there is no intersection and no angle to calculate.

It usually helps when you can give some background of the actual usecase where / why you need this information.

edit

Just thought about it for a minute and for the second case all you would need it the law if cosines. As we know the length of 3 side of a non right triangle between rE, rC and |CE|, we can use the law of cosines to get any of the angles.

```
a² = b² + c² - 2bc*cos(alpha)
```

Just rearrange to alpha and insert our 3 sides accordingly. a is rE, b is rC and c is |CE|

first, rearrange:

```
(b²+c²-a²) / 2bc = cos(alpha)
```

then just insert our values:

```
float c = (E-C).magnitude;
float alpha = Mathf.Acos((rC*rC + c*c - rE*rE) / 2*rC*c);
```

This should again give you the angle in radians. If you need / want degrees you can multiply the angle in radians with Mathf.Rad2Deg to get degrees