Skip to content

Commit

Permalink
Add MinDistanceSampling for 3D Ball (#1121)
Browse files Browse the repository at this point in the history
* add MinDistanceSampling for 3D Ball

* Update src/sampling/mindistance.jl

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* add test

* Minor adjustments

* Fix method ambiguity

---------

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Júlio Hoffimann <julio.hoffimann@gmail.com>
  • Loading branch information
3 people authored Oct 25, 2024
1 parent e00e8b2 commit 079c4fc
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 3 deletions.
10 changes: 7 additions & 3 deletions src/sampling/mindistance.jl
Original file line number Diff line number Diff line change
Expand Up @@ -37,15 +37,19 @@ MinDistanceSampling(α, ρ, δ, metric) = MinDistanceSampling(addunit(α, u"m"),

MinDistanceSampling::T; ρ=T(0.65), δ=100, metric=Euclidean()) where {T} = MinDistanceSampling(α, ρ, δ, metric)

function sample(rng::AbstractRNG, d::Domain, method::MinDistanceSampling)
sample(rng::AbstractRNG, d::Domain, method::MinDistanceSampling) = _sample(rng, d, method)

sample(rng::AbstractRNG, b::Ball, method::MinDistanceSampling) = _sample(rng, b, method)

function _sample(rng::AbstractRNG, obj, method::MinDistanceSampling)
# retrieve parameters
α = method.α
ρ = method.ρ
δ = method.δ
m = method.metric

# total volume/area of the object
V = sum(measure, d)
V = measure(obj)

# expected number of Poisson samples
# for relative radius (Lagae & Dutré 2007)
Expand All @@ -55,7 +59,7 @@ function sample(rng::AbstractRNG, d::Domain, method::MinDistanceSampling)
O = ceil(Int, δ * ustrip(N))

# oversample the object
points = sample(rng, d, HomogeneousSampling(O))
points = sample(rng, obj, HomogeneousSampling(O))

# collect points into point set
𝒫 = PointSet(collect(points))
Expand Down
6 changes: 6 additions & 0 deletions test/sampling.jl
Original file line number Diff line number Diff line change
Expand Up @@ -392,6 +392,12 @@ end
poly = PolyArea(cart.([(-44.20065308, -21.12284851), (-44.20324135, -21.122799875), (-44.20582962, -21.12275124)]))
ps = sample(poly, MinDistanceSampling(3.2423333333753135e-5))
@test length(ps) > 0

ball = Ball(cart(10, 10), T(3))
ps = sample(ball, MinDistanceSampling(1.0))
n = length(ps)
@test all((ball), ps)
@test all(norm(ps[i] - ps[j]) T(1.0) * u"m" for i in 1:n for j in (i + 1):n)
end

@testitem "FibonacciSampling" setup = [Setup] begin
Expand Down

0 comments on commit 079c4fc

Please sign in to comment.