// Description: An aggregate file for bounding spheres
#ifndef PASTELGEOMETRY_BOUNDING_SPHERE_H
#define PASTELGEOMETRY_BOUNDING_SPHERE_H
#include "pastel/geometry/bounding/bounding_sphere_alignedbox.h"
#include "pastel/geometry/bounding/bounding_sphere_box.h"
#include "pastel/geometry/bounding/bounding_sphere_segment.h"
#include "pastel/geometry/bounding/bounding_sphere_pointset.h"
#include "pastel/geometry/shape/sphere.h"
#include "pastel/geometry/shape/simplex.h"
namespace Pastel
{
    //! Finds the minimum volume bounding sphere of a 0-simplex.
    template <typename Real, integer N>
    Sphere<Real, N> boundingSphere(
        const PASTEL_SIMPLEX(Real, N, 0)& simplex);
    //! Finds the minimum volume bounding sphere of a 1-simplex.
    template <typename Real, integer N>
    Sphere<Real, N> boundingSphere(
        const PASTEL_SIMPLEX(Real, N, 1)& simplex);
    //! Finds the minimum volume bounding sphere of an M-simplex.
    template <typename Real, integer N, integer M>
    Sphere<Real, N> boundingSphere(
        const PASTEL_SIMPLEX(Real, N, M)& simplex);
    //! Finds the circumscribed sphere of a point.
    template <typename Real, integer N>
    Sphere<Real, N> circumscribedSphere(
        const Vector<Real, N>& aPoint);
    //! Finds the circumscribed sphere of two points.
    template <typename Real, integer N>
    Sphere<Real, N> circumscribedSphere(
        const Vector<Real, N>& aPoint,
        const Vector<Real, N>& bPoint);
    //! Finds the circumscribed sphere of a 0-simplex.
    template <typename Real, integer N>
    Sphere<Real, N> circumscribedSphere(
        const PASTEL_SIMPLEX(Real, N, 0)& simplex);
    //! Finds the circumscribed sphere of a 1-simplex.
    template <typename Real, integer N>
    Sphere<Real, N> circumscribedSphere(
        const PASTEL_SIMPLEX(Real, N, 1)& simplex);
    //! Finds the circumscribed sphere of an M-simplex.
    template <typename Real, integer N, integer M>
    Sphere<Real, N> circumscribedSphere(
        const PASTEL_SIMPLEX(Real, N, M)& simplex);
}
#include "pastel/geometry/bounding/bounding_sphere.hpp"
#endif