#pragma once

#include "point3d.h"

class Plane;

class Sphere SIGNATURED
{
 public:
	Point3D center;
	Scalar radius;

	Sphere()	{}
	Sphere(const Point3D &A_Point, Scalar Radius) : center(A_Point), radius(Radius)		{}
	Sphere(Scalar X, Scalar Y, Scalar Z, Scalar Radius) : center(X,Y,Z), radius(Radius)	{}

	//
	// Intersection functions
	//
	Logical Contains(const Point3D &point) const;
	Logical Intersects(const Sphere &sphere) const;
	Logical Intersects(const Plane &plane) const;

	friend std::ostream& operator<<(std::ostream& Stream, const Sphere &A_Sphere);
};
