Решение:
Мне кажется, я понял:
arccos((ra^2+rb^2-c^2)/(2*ra*rb))
где:
c
- расстояние между центрами обоих кругов (distance
в вашем вопросе)
ra
- радиус первого круга
rb
- радиус второго круга
Код:
В JavaScript с вашими значениями это должно дать:
const angleInRadians = Math.acos((circle1.radius*circle1.radius + circle2.radius*circle2.radius - distance*distance)/(2*circle1.radius*circle2.radius))
Обратите внимание, что результат в радианах , см. документ для acos
Если вы хотите получить его в градусах , просто используйте преобразование:
const angleInDegrees = angleInRadians / Math.PI * 180
Объяснение:
Угол между окружностями определяется как угол между касательными линиями в любой из точек пересечения (если есть две точки, оба угла одинаковы).
Угол между касательными такой же, как угол между соответствующими радиусами (поскольку радиусы ортогональны касательным линиям).
Чтобы получить угол между радиусами:
Нарисуйте треугольник между обоими центрами и одной из точек пересечения. Используйте закон косинусов , основанный на угле в точке пересечения.
c^2 = ra^2 + rb^2 - 2*ra*rb*cos(alpha)
Если вам нужны дополнительные объяснения, не стесняйтесь спрашивать в комментариях.