Total circles area: Difference between revisions

Added Julia language
m (added a related link.)
(Added Julia language)
Line 1,436:
 
=={{header|Julia}}==
{{works with|Julia|0.6}}
 
Simple grid algorithm. Borrows the xmin/xmax idea from the Python version. This algorithm is fairly slow.
 
<lang julia># Total circles area: https://rosettacode.org/wiki/Total_circles_area
<lang Julia>tic()
# v0.6
#
# Size of my grid -- higher values => higher accuracy.
#
ngrid = 10000;
 
xc = [1.6417233788, -1.4944608174 , 0.6110294452 , 0.3844862411, -0.2495892950 , 1.7813504266 -0.1985249206 -1.7011985145 -0.4319462812 0.2178372997 -0.6294854565 1.7952608455 1.4168575317 1.4637371396 -0.5263668798 -1.2197352481 -0.1389358881 1.5293954595 -0.5258728625 -0.1403562064 0.8055826339 -0.6311979224 1.4685857879 -0.6855727502 0.0152957411];,
-0.1985249206, -1.7011985145, -0.4319462812, 0.2178372997, -0.6294854565, 1.7952608455,
yc = [1.6121789534 1.2077959613 -0.6907087527 0.2923344616 -0.3832854473 1.6178237031 -0.8343333301 -0.1263820964 1.4104420482 -0.9499557344 -1.3078893852 0.6281269104 1.0683357171 0.9463877418 1.7315156631 0.9144146579 0.1092805780 0.0030278255 1.3782633069 0.2437382535 -0.0482092025 0.7184578971 -0.8347049536 1.6465021616 0.0638919221];
1.4168575317, 1.4637371396, -0.5263668798, -1.2197352481, -0.1389358881, 1.5293954595,
r = [0.0848270516 1.1039549836 0.9089162485 0.2375743054 1.0845181219 0.8162655711 0.0538864941 0.4776976918 0.7886291537 0.0357871187 0.7653357688 0.2727652452 1.1016025378 1.1846214562 1.4428514068 1.0727263474 0.7350208828 1.2472867347 1.3495508831 1.3804956588 0.3327165165 0.2491045282 1.3670667538 1.0593087096 0.9771215985];
-0.5258728625, -0.1403562064, 0.8055826339, -0.6311979224, 1.4685857879, -0.6855727502,
r2 = r .* r;
0.0152957411]
yc = [1.6121789534, 1.2077959613, -0.6907087527, 0.2923344616, -0.3832854473, 1.6178237031,
-0.8343333301, -0.1263820964, 1.4104420482, -0.9499557344, -1.3078893852, 0.6281269104,
1.0683357171, 0.9463877418, 1.7315156631, 0.9144146579, 0.1092805780, 0.0030278255,
1.3782633069, 0.2437382535, -0.0482092025, 0.7184578971, -0.8347049536, 1.6465021616,
0.0638919221]
r = [0.0848270516, 1.1039549836, 0.9089162485, 0.2375743054, 1.0845181219, 0.8162655711,
0.0538864941, 0.4776976918, 0.7886291537, 0.0357871187, 0.7653357688, 0.2727652452,
1.1016025378, 1.1846214562, 1.4428514068, 1.0727263474, 0.7350208828, 1.2472867347,
1.3495508831, 1.3804956588, 0.3327165165, 0.2491045282, 1.3670667538, 1.0593087096,
0.9771215985]
 
# Size of my grid -- higher values => higher accuracy.
ncircles = length(xc);
function main(xc::Vector{<:Real}, yc::Vector{<:Real}, r::Vector{<:Real}, ngrid::Integer=10000)
r2 = r .* r;
ncircles = length(xc);
 
# Compute the bounding box of the circles.
#
ymin xmin = minimum(ycxc .- r);
# Compute the bounding box of the circles.
ymax xmax = maximum(ycxc .+ r);
#
xmin ymin = minimum(xcyc .- r);
xmax ymax = maximum(xcyc .+ r);
# Keep a counter.
ymin = minimum(yc-r);
inside = 0;
ymax = maximum(yc+r);
# For every point in my grid.
 
for x in linspace(xmin, xmax, ngrid), y = linspace(ymin, ymax, ngrid)
#
ifinside += any(r2 .> (x - xc) .^ 2 + (y - yc) .^ 2)
# Keep a counter.
#
inside = 0;
 
#
# For every point in my grid.
#
for x = linspace(xmin,xmax,ngrid)
for y = linspace(ymin,ymax,ngrid)
if any(r2 .> (x - xc).^2 + (y - yc).^2)
inside = inside + 1;
end
end
box_area boxarea = (xmax - xmin) * (ymax - ymin);
result = box_area return boxarea * inside / ngrid ^ 2;
end
 
println(@time main(xc, yc, r, 1000))</lang>
box_area = (xmax-xmin) * (ymax-ymin);
 
result = box_area * inside / ngrid^2;
toc()
 
println(result)</lang>
 
=={{header|Kotlin}}==
Anonymous user