#define dx 0.0001 'read in the data; I reordered them in descending order of radius 'This maximises our chance of being able to break early, saving run time, 'and we needn't bother finding out which circles are entirely inside others data -0.5263668798,1.7315156631,1.4428514068 data -0.1403562064,0.2437382535,1.3804956588 data 1.4685857879,-0.8347049536,1.3670667538 data -0.5258728625,1.3782633069,1.3495508831 data 1.5293954595,0.0030278255,1.2472867347 data 1.4637371396,0.9463877418,1.1846214562 data -1.4944608174,1.2077959613,1.1039549836 data 1.4168575317,1.0683357171,1.1016025378 data -0.249589295,-0.3832854473,1.0845181219 data -1.2197352481,0.9144146579,1.0727263474 data -0.6855727502,1.6465021616,1.0593087096 data 0.0152957411,0.0638919221,0.9771215985 data 0.6110294452,-0.6907087527,0.9089162485 data 1.7813504266,1.6178237031,0.8162655711 data -0.4319462812,1.4104420482,0.7886291537 data -0.6294854565,-1.3078893852,0.7653357688 data -0.1389358881,0.109280578,0.7350208828 data -1.7011985145,-0.1263820964,0.4776976918 data 0.8055826339,-0.0482092025,0.3327165165 data 1.7952608455,0.6281269104,0.2727652452 data -0.6311979224,0.7184578971,0.2491045282 data 0.3844862411,0.2923344616,0.2375743054 data 1.6417233788,1.6121789534,0.0848270516 data -0.1985249206,-0.8343333301,0.0538864941 data 0.2178372997,-0.9499557344,0.0357871187 function dist(x0 as double, y0 as double, x1 as double, y1 as double) as double 'distance between two points in 2d space return sqr( (x1-x0)^2 + (y1-y0)^2 ) end function dim as double x(1 to 25), y(1 to 25), r(1 to 25), gx, gy, A0, A1, A2, A dim as integer i, cx, cy for i = 1 to 25 read x(i), y(i), r(i) next i for gx = -2.6 to 2.9 step dx 'sample points on a grid cx += 1 for gy = -2.3 to 3.2 step dx cy += 1 for i = 1 to 25 if dist(gx, gy, x(i), y(i)) <= r(i) then 'if our grid point is in the circle A2 += dx^2 'add the area of a grid square if cx mod 2 = 0 and cy mod 2 = 0 then A1 += 4*dx^2 if cx mod 4 = 0 and cy mod 4 = 0 then A0 += 16*dx^2 'also keep track of coarser grid areas of twice and four times the size 'You'll see why in a moment exit for end if next i next gy next gx 'use Shanks method to refine our estimate of the area A = (A0*A2-A1^2) / (A0 + A2 - 2*A1) print A0, A1, A2, A