import java.awt.*; import javax.swing.*; public class CircleOverlapData { public static void main (String[] args) { double r1, r2, d, alpha1, alpha2, segment1Area, segment2Area, overlapArea, A2; String input; input = JOptionPane.showInputDialog("Big circle radius","1"); r1 = Double.parseDouble(input); input = JOptionPane.showInputDialog("Little circle radius","0.5"); r2 = Double.parseDouble(input); A2 = Math.PI*r2*r2; for (int i=0; i<=100; i++) { d = (r1+r2) - 2*r2/100 * i ; alpha1 = alphaAngle(commonChordX(r1,r2,d), 0.5*chordLength(r1,r2,d)); segment1Area = sectorArea(r1, alpha1) - triangleArea(r1, alpha1); alpha2 = alphaAngle(d-commonChordX(r1,r2,d), 0.5*chordLength(r1,r2,d)); if (alpha2 < 0) //flipped negative because >=180 alpha2 = 2*Math.PI + alpha2; segment2Area = sectorArea(r2, alpha2) - triangleArea(r2, alpha2); overlapArea = segment1Area+segment2Area; //System.out.println(""+i+" "+overlapArea+" "+overlapArea/A2); System.out.println(""+i+" "+overlapArea/A2); } System.out.println(""); } public static double commonChordX (double r1, double r2, double d) { return -(r2*r2 - r1*r1 - d*d) / (2*d); } public static double chordLength(double r1, double r2, double d) { double x = commonChordX(r1,r2,d); //-(r2*r2 - r1*r1 - d*d) / (2*d); return 2 * Math.sqrt(r1*r1 - x*x); } public static double alphaAngle(double x, double y) { //x is adj, y is opp return 2 * Math.atan(y/x); } public static double triangleArea(double r, double a) { //a in radians return r*r/2 * Math.sin(a); } public static double sectorArea(double r, double a) { //a in radians return Math.PI*r*r * (a/(2*Math.PI)); } }