77 lines
2.1 KiB
Text
77 lines
2.1 KiB
Text
# with Montecarlo sampling
|
|
repeat
|
|
s$ = input
|
|
until s$ = ""
|
|
c[][] &= number strsplit s$ " "
|
|
.
|
|
# mark inner circles
|
|
for i to len c[][]
|
|
for j to len c[][]
|
|
if i <> j
|
|
dx = abs (c[i][1] - c[j][1])
|
|
dy = abs (c[i][2] - c[j][2])
|
|
d = sqrt (dx * dx + dy * dy)
|
|
if d + c[j][3] < c[i][3]
|
|
c[j][3] = 0
|
|
.
|
|
.
|
|
.
|
|
.
|
|
# find bounding box and remove marked circles
|
|
i = len c[][]
|
|
while i >= 1
|
|
if 0 = 1 and c[i][3] = 0
|
|
swap c[i][] c[len c[][]][]
|
|
len c[][] -1
|
|
else
|
|
maxx = higher (c[i][1] + c[i][3]) maxx
|
|
minx = lower (c[i][1] - c[i][3]) minx
|
|
maxy = higher (c[i][2] + c[i][3]) maxy
|
|
miny = lower (c[i][2] - c[i][3]) miny
|
|
c[i][3] = c[i][3] * c[i][3]
|
|
.
|
|
i -= 1
|
|
.
|
|
ntry = 10000000
|
|
print ntry & " samples ..."
|
|
for try to ntry
|
|
px = (maxx - minx) * randomf + minx
|
|
py = (maxy - miny) * randomf + miny
|
|
for i to len c[][]
|
|
dx = px - c[i][1]
|
|
dy = py - c[i][2]
|
|
if dx * dx + dy * dy <= c[i][3]
|
|
inside += 1
|
|
break 1
|
|
.
|
|
.
|
|
.
|
|
numfmt 4 0
|
|
print inside / ntry * (maxx - minx) * (maxy - miny)
|
|
#
|
|
input_data
|
|
1.6417233788 1.6121789534 0.0848270516
|
|
-1.4944608174 1.2077959613 1.1039549836
|
|
0.6110294452 -0.6907087527 0.9089162485
|
|
0.3844862411 0.2923344616 0.2375743054
|
|
-0.2495892950 -0.3832854473 1.0845181219
|
|
1.7813504266 1.6178237031 0.8162655711
|
|
-0.1985249206 -0.8343333301 0.0538864941
|
|
-1.7011985145 -0.1263820964 0.4776976918
|
|
-0.4319462812 1.4104420482 0.7886291537
|
|
0.2178372997 -0.9499557344 0.0357871187
|
|
-0.6294854565 -1.3078893852 0.7653357688
|
|
1.7952608455 0.6281269104 0.2727652452
|
|
1.4168575317 1.0683357171 1.1016025378
|
|
1.4637371396 0.9463877418 1.1846214562
|
|
-0.5263668798 1.7315156631 1.4428514068
|
|
-1.2197352481 0.9144146579 1.0727263474
|
|
-0.1389358881 0.1092805780 0.7350208828
|
|
1.5293954595 0.0030278255 1.2472867347
|
|
-0.5258728625 1.3782633069 1.3495508831
|
|
-0.1403562064 0.2437382535 1.3804956588
|
|
0.8055826339 -0.0482092025 0.3327165165
|
|
-0.6311979224 0.7184578971 0.2491045282
|
|
1.4685857879 -0.8347049536 1.3670667538
|
|
-0.6855727502 1.6465021616 1.0593087096
|
|
0.0152957411 0.0638919221 0.9771215985
|