using Luxor using Random: Random using StaticArrays: SVector using ReCo: ReCo function gen_rdf_graphics() Random.seed!(42) box_length = 100 box_height = 100 graphics_export_dir = "exports/graphics" mkpath(graphics_export_dir) Drawing(box_length, box_height, "$graphics_export_dir/rdf_shells.pdf") origin() particle_radius = 5 Δr = 3 * particle_radius setcolor("blue") circle(Point(0, 0), particle_radius, :fill) N = 50 twice_max_particle_coordinate = box_length selected_shell_ind = 2 selected_lower_radius = selected_shell_ind * Δr particle_cs = Vector{SVector{2,Float64}}(undef, N) x = y = distance = 0.0 for p1_ind in 1:N while true x = (rand() - 0.5) * twice_max_particle_coordinate y = (rand() - 0.5) * twice_max_particle_coordinate p1_c = SVector(x, y) distance = ReCo.norm2d(p1_c) no_collision = true if distance > 2 * particle_radius for p2_ind in 1:(p1_ind - 1) if ReCo.norm2d(p1_c - particle_cs[p2_ind]) < 2 * particle_radius no_collision = false break end end if no_collision particle_cs[p1_ind] = p1_c break end end end if selected_lower_radius <= distance < selected_lower_radius + Δr setcolor("green") else setcolor("orange") end circle(x, y, particle_radius, :fill) end setcolor("black") setline(0.2) for shell_ind in 1:ceil(Int64, (box_length - 1) / 2 / Δr) circle(Point(0, 0), shell_ind * Δr, :stroke) end setcolor("red") setline(0.3) line(Point(0, 0), Point(Δr, 0), :stroke) fontsize(4) text("r", Point(0.4 * Δr, 0.3 * Δr)) finish() return nothing end