///////////////////////////////////////////////////////////////////////////////
//  CSphere.cpp

#include "CSphere.h"

namespace math3d {

CSphere::CSphere() :
m_Radius(0.0f)
{

}

CSphere::CSphere(const S3D& Pos, float Radius) :
m_Pos(Pos),
m_Radius(Radius)
{

}

CSphere::~CSphere()
{

}

void CSphere::Set(const S3D& Pos, float Radius)
{
	m_Pos = Pos;
	m_Radius = Radius;

}

const S3D& CSphere::GetPos() const
{
	return m_Pos;

}

float CSphere::GetRadius() const
{
	return m_Radius;

}

// 球と光線の衝突判定
bool CSphere::IsCollision(const S3D& RayPos, const S3D& RayVec) const
{
	const S3D m = RayPos - m_Pos;
	const float b = S3D::DotProduct(m, RayVec);
	const float c = S3D::DotProduct(m, m) - m_Radius * m_Radius;

	if (c > 0.0f && b > 0.0f) return false;

	const float discr = b * b - c;
	if (discr < 0.0f) return false;

//	float t = -b - sqrt(discr);
//	if (t < 0.0f) t = 0.0f;

	return true;

}

}

