// David Eberly, Geometric Tools, Redmond WA 98052 // Copyright (c) 1998-2020 // Distributed under the Boost Software License, Version 1.0. // https://www.boost.org/LICENSE_1_0.txt // https://www.geometrictools.com/License/Boost/LICENSE_1_0.txt // Version: 4.0.2019.08.13 #pragma once #include // The hypersphere is represented as |X-C| = R where C is the center and R is // the radius. The hypersphere is a circle for dimension 2 or a sphere for // dimension 3. namespace WwiseGTE { template class Hypersphere { public: // Construction and destruction. The default constructor sets the center // to (0,...,0) and the radius to 1. Hypersphere() : radius((Real)1) { center.MakeZero(); } Hypersphere(Vector const& inCenter, Real inRadius) : center(inCenter), radius(inRadius) { } // Public member access. Vector center; Real radius; public: // Comparisons to support sorted containers. bool operator==(Hypersphere const& hypersphere) const { return center == hypersphere.center && radius == hypersphere.radius; } bool operator!=(Hypersphere const& hypersphere) const { return !operator==(hypersphere); } bool operator< (Hypersphere const& hypersphere) const { if (center < hypersphere.center) { return true; } if (center > hypersphere.center) { return false; } return radius < hypersphere.radius; } bool operator<=(Hypersphere const& hypersphere) const { return !hypersphere.operator<(*this); } bool operator> (Hypersphere const& hypersphere) const { return hypersphere.operator<(*this); } bool operator>=(Hypersphere const& hypersphere) const { return !operator<(hypersphere); } }; // Template aliases for convenience. template using Circle2 = Hypersphere<2, Real>; template using Sphere3 = Hypersphere<3, Real>; }