Как получить размер пересекающейся части в круге в Java

Мне нужен размер черной части этого изображения:
Image

Я провел небольшое исследование ch о том, как найти это в обычной математике, и мне указали на этот веб-сайт: Веб-сайт

Окончательным ответом при получении этого было pict
(из MathWorld - Интернет-ресурс Wolfram: wolfram.com )

где r - радиус первого круга, R - радиус второго круга, а d - расстояние между двумя центры.

Код, который я пытался использовать, чтобы получить размер, был следующим:

float r = getRadius1();
float R = e.getRadius1();
float deltaX = Math.abs((getX()  + getRadius()) - (e.getX() + e.getRadius()));
float deltaY =  Math.abs((getY()  + getRadius()) - (e.getY() + e.getRadius()));
float d = (float) Math.sqrt(Math.pow(deltaX, 2) + Math.pow(deltaY, 2));

float part, part2, part3;
//Chopping it in parts, because it's easier.

part = (float) (Math.pow(r,2) * Math.acos(
      Math.toRadians((Math.pow(d, 2) + Math.pow(r, 2) - Math.pow(R, 2))/(2*d*r))));

part2 = (float) (Math.pow(R,2) * Math.acos(
      Math.toRadians((Math.pow(d, 2) + Math.pow(R, 2) - Math.pow(r, 2))/(2*d*R))));

part3 = (float) (0.5 * Math.sqrt((-d + r + R) * (d+r-R) * (d-r+R) * (d+r+R)));

float res = part + part2 - part3; 

Main.log(res + "       " + part + " " + part2 + " " + part3+ "       "
         + r + " " + R  + " " + d);
//logs the data and System.out's it

Я провел некоторое тестирование, и результат был следующим:

1345.9663       621.6233 971.1231 246.78008       20.0 25.0 43.528286

Таким образом, это означает, что размер перекрывающейся части был больше, чем сам круг (который равен r ^ 2 * PI ).

Что я сделал не так?

6
задан Glorfindel 16 August 2019 в 03:34
поделиться