Tôi cần kích thước của phần màu đen của hình ảnh này:
Làm thế nào để có được kích thước của phần giao nhau trong một vòng tròn trong Java
tôi đã thực hiện một số nghiên cứu về làm thế nào để tìm thấy nó trong toán học bình thường , và tôi đã chỉ vào trang web này: Website
Câu trả lời cuối cùng về việc nó là pict http://mathworld.wolfram.com/images/equations/Circle-CircleIntersection/Inline41.gif
trong đó r là bán kính của vòng tròn đầu tiên, R bán kính của vòng tròn thứ hai, và d khoảng cách giữa hai trung tâm.
Mã tôi cố gắng sử dụng để có được kích thước của điều này là như sau:
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
tôi đã làm một số thử nghiệm, và đầu ra là thế này:
1345.9663 621.6233 971.1231 246.78008 20.0 25.0 43.528286
Vì vậy, đó chỉ ra rằng kích thước của phần chồng chéo lớn hơn chính vòng tròn (là r^2 * PI
).
Tôi đã làm gì sai?
Tôi sẽ sử dụng 'double' thay vì' float' vì nó sẽ có ít lỗi biểu diễn hơn, nhưng không đủ để giải thích lỗi của bạn. ;) –
Bạn có thể cho chúng tôi thấy công thức của deltaX và Y vì chúng trông không đúng không? Sự khác nhau giữa getRadius() và getRadius1() là gì? –
Tại sao bạn có getRadius1() và e.getRadius1()? Bạn quên để có được bán kính của r? – Max