1
0
Fork 0
mirror of https://gitlab.rlp.net/mobitar/ReCo.jl.git synced 2024-09-19 19:01:17 +00:00
ReCo.jl/src/Particle.jl
2021-12-07 05:52:10 +01:00

56 lines
1.2 KiB
Julia

using StaticArrays: SVector
mutable struct Particle
id::Int64
c::SVector{2,Float64} # Center
tmp_c::SVector{2,Float64} # Temporary center
φ::Float64 # Angle
function Particle(id::Int64, c::SVector{2,Float64}, φ::Float64)
return new(id, c, c, φ)
end
end
function restrict_coordinate(value::Float64, l::Float64)
if value < -l
value += 2 * l
elseif value >= l
value -= 2 * l
end
return value
end
function restrict_coordinates!(p::Particle, l::Float64)
p.tmp_c = SVector{2}(restrict_coordinate(p.tmp_c[i], l) for i in 1:2)
return nothing
end
function minimum_image_coordinate(value::Float64, l::Float64)
if value <= -l
value += 2 * l
elseif value > l
value -= 2 * l
end
return value
end
function minimum_image(v::SVector{2,Float64}, l::Float64)
return SVector{2}(minimum_image_coordinate(v[i], l) for i in 1:2)
end
function are_overlapping(p1::Particle, p2::Particle, overlapping_r²::Float64, l::Float64)
r⃗₁₂ = p2.c - p1.c # 1 -> 2
r⃗₁₂ = minimum_image(r⃗₁₂, l)
distance² = r⃗₁₂[1]^2 + r⃗₁₂[2]^2
overlapping = distance² < overlapping_r²
return (; overlapping, r⃗₁₂, distance²)
end