diff --git a/graphics/center_of_mass.jl b/graphics/center_of_mass.jl index c2c540b..f17f7ae 100644 --- a/graphics/center_of_mass.jl +++ b/graphics/center_of_mass.jl @@ -33,10 +33,10 @@ function gen_COM_graphics() ## - graphics_export_dir = "exports/graphics" + graphics_export_dir = "exports/graphics/COM" mkpath(graphics_export_dir) - Drawing(box_length, box_height, "$graphics_export_dir/line.pdf") + Drawing(box_length, box_height, "$graphics_export_dir/linear.pdf") origin() setcolor("black") @@ -82,7 +82,7 @@ function gen_COM_graphics() ## - Drawing(box_length, box_height, "$graphics_export_dir/circle.pdf") + Drawing(box_length, box_height, "$graphics_export_dir/circular_projectiong.pdf") origin() arrow(Point(-1.2 * R, 0), Point(1.2 * R, 0); arrowheadlength=0.1 * R, linewidth=0.8) diff --git a/graphics/radial_distribution.jl b/graphics/radial_distribution.jl new file mode 100644 index 0000000..1d24552 --- /dev/null +++ b/graphics/radial_distribution.jl @@ -0,0 +1,87 @@ +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 \ No newline at end of file