Imath
<navlinks>
<page>

# Sphere3

    #include <Imath/ImathSphere.h>

The `Sphere3` class template represents a sphere in 3D space, with predefined typedefs for lines of type `float` and `double`.

Example:

    #include <Imath/ImathSphere.h>
    #include <cassert>

    void
    sphere3_example()
    {
        Imath::V3f center (1.0f, 1.0f, 1.0f);
        float radius = 2.0f;
        Imath::Sphere3f s (center, radius);

        assert (s.center == center);
        assert (s.radius == radius);

        Imath::Line3f line (Imath::V3f (0.0f, 0.0f, 0.0f),
                            Imath::V3f (1.0f, 1.0f, 1.0f));

        Imath::V3f v;
        assert (s.intersect (line, v));

        assert (v.equalWithAbsError (Imath::V3f(2.1547f, 2.1547f, 2.1547f), 1e-6f));
    }

typedef Sphere3<float> Imath::Sphere3f

  Sphere of type float.

template<class T>
class Sphere3

  A 3D sphere.

  Direct access to member fields

  Vec3<T> center

    Center.

  T radius

    Radius.

  Constructors

  inline constexpr Sphere3()

    Default is center at (0,0,0) and radius of 0.

  inline constexpr Sphere3(const Vec3<T> &c, T r)

    Initialize to a given center and radius.

  Manipulation

  inline void circumscribe(const Box<Vec3<T>> &box)

    Set the center and radius of the sphere so that it tightly encloses Box b.

  Utility Methods

  bool intersect(const Line3<T> &l, Vec3<T> &intersection) const

    If the sphere and line `l` intersect, then compute the smallest `t` with `t>=0` so that `l(t)` is a point on the sphere.

    Parameters:

      - l – [in] The line

      - intersection – [out] The point of intersection

    Returns:

      True if the sphere and line intersect, false if they do not.

  bool intersectT(const Line3<T> &l, T &t) const

    If the sphere and line `l` intersect, then compute the smallest `t` with `t>=0` so that `l(t)` is a point on the sphere.

    Parameters:

      - l – [in] The line

      - t – [out] The parameter of the line at the intersection point

    Returns:

      True if the sphere and line intersect, false if they do not.

</page>