Solution refactoring and restructuring, removed Boost dependency, removed unused tools
This commit is contained in:
106
src/SphereLib/sphere.h
Normal file
106
src/SphereLib/sphere.h
Normal file
@ -0,0 +1,106 @@
|
||||
/* Copyright (C) John W. Ratcliff, 2001.
|
||||
* All rights reserved worldwide.
|
||||
*
|
||||
* This software is provided "as is" without express or implied
|
||||
* warranties. You may freely copy and compile this source into
|
||||
* applications you distribute provided that the copyright text
|
||||
* below is included in the resulting source code, for example:
|
||||
* "Portions Copyright (C) John W. Ratcliff, 2001"
|
||||
*/
|
||||
#pragma once
|
||||
|
||||
#include "vector.h"
|
||||
|
||||
|
||||
/***********************************************************************/
|
||||
/** SPHERE.H : Base class to represent a Sphere in 3 space. */
|
||||
/** */
|
||||
/** Written by John W. Ratcliff jratcliff@att.net */
|
||||
/***********************************************************************/
|
||||
|
||||
class SphereInterface
|
||||
{
|
||||
public:
|
||||
SphereInterface();
|
||||
virtual ~SphereInterface();
|
||||
virtual int GetVertexCount(void) const = 0;
|
||||
virtual bool GetVertex(int i,Vector3d &vect) const = 0;
|
||||
private:
|
||||
};
|
||||
|
||||
|
||||
|
||||
class Sphere
|
||||
{
|
||||
public:
|
||||
Sphere();
|
||||
Sphere(const Vector3d ¢er, float radius);
|
||||
|
||||
virtual ~Sphere() {}
|
||||
|
||||
void Set(const Vector3d ¢er, float radius);
|
||||
|
||||
void Compute(const SphereInterface &source);
|
||||
|
||||
float GetRadius(void) const { return mRadius; };
|
||||
float GetRadius2(void) const { return mRadius2; };
|
||||
const Vector3d& GetCenter(void) const { return mCenter; };
|
||||
|
||||
bool RayIntersection(const Vector3d &rayOrigin,
|
||||
const Vector3d &V,
|
||||
float distance,
|
||||
Vector3d *intersect);
|
||||
|
||||
|
||||
bool RayIntersection(const Vector3d &rayOrigin,
|
||||
const Vector3d &rayDirection,
|
||||
Vector3d *intersect);
|
||||
|
||||
bool RayIntersectionInFront(const Vector3d &rayOrigin,
|
||||
const Vector3d &rayDirection,
|
||||
Vector3d *intersect);
|
||||
|
||||
void Report(void);
|
||||
|
||||
void SetRadius(float radius)
|
||||
{
|
||||
mRadius = radius;
|
||||
mRadius2 = radius*radius;
|
||||
}
|
||||
|
||||
|
||||
bool InSphereXY(const Vector3d &pos,float distance) const
|
||||
{
|
||||
float dx = pos.x - mCenter.x;
|
||||
float dy = pos.y - mCenter.y;
|
||||
float dist = sqrtf( dx*dx + dy*dy );
|
||||
if ( dist < (mRadius+distance) ) return true;
|
||||
return false;
|
||||
};
|
||||
|
||||
bool InSphere(const Vector3d &pos,float distance) const
|
||||
{
|
||||
float dx = pos.x - mCenter.x;
|
||||
float dy = pos.y - mCenter.y;
|
||||
float dz = pos.z - mCenter.z;
|
||||
|
||||
float dist = sqrtf( dx*dx + dy*dy + dz*dz );
|
||||
if ( dist < (mRadius+distance) ) return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
|
||||
protected:
|
||||
Vector3d mCenter;
|
||||
private:
|
||||
float mRadius;
|
||||
float mRadius2; // radius squared.
|
||||
};
|
||||
|
||||
|
||||
inline Sphere::Sphere()
|
||||
: mCenter(Vector3d(0.0f, 0.0f, 0.0f)), mRadius(0.0f), mRadius2(0.0f) { };
|
||||
|
||||
inline Sphere::Sphere(const Vector3d ¢er, float radius)
|
||||
: mCenter(center), mRadius(radius), mRadius2(radius*radius) { };
|
Reference in New Issue
Block a user