/* * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. * * Copyright 2015-2018 Danny Robson */ #pragma once #include namespace cruft::geom::sample { /// Provides an interface to randomly sample points within the volume of /// a supplied shape. /// /// This class _should_ be specialised for performance. Though a basic /// rejection sampling implementation is defined as a fallback. template class volume; template volume (ShapeT const&) -> volume>; /// Provides an interface to randomly sample points across the surface of /// a supplied shape. /// /// The class _must_ be specialised for each shape. template class surface; template surface (ShapeT const&) -> surface>; /// Provides an interface to randomly sample points across the edges of a /// shape; eg, the perimeter of an extent or region. template struct edge; template edge (ShapeT const &) -> edge>; }