necesito el tamaño de la pieza negro de esta imagen:
Cómo obtener el tamaño de la parte de intersección en un círculo en Java
que he hecho algunas investigaciones sobre cómo llegar a ella en matemáticas normales y me señaló a este sitio web: Website
la respuesta final en conseguir que era pict http://mathworld.wolfram.com/images/equations/Circle-CircleIntersection/Inline41.gif
donde r es el radio del primer círculo, R el radio del segundo círculo, y D la distancia entre los dos centros.
El código He intentado utilizar para obtener el tamaño de ello fue la siguiente:
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
Hice algunas pruebas, y la salida fue la siguiente:
1345.9663 621.6233 971.1231 246.78008 20.0 25.0 43.528286
Para que indica que el tamaño de la parte superpuesta fue mayor que el círculo en sí (que es r^2 * PI
).
¿Qué hice mal?
Usaría 'double' en lugar de' float' ya que tendrá menos error de representación, pero no lo suficiente como para explicar el suyo. ;) –
¿Puede mostrarnos la fórmula para deltaX y Y porque no se ven bien? ¿Cuál es la diferencia entre getRadius() y getRadius1()? –
¿Por qué tiene getRadius1() y e.getRadius1()? ¿Olvidas obtener el radio de r? – Max