|
- #ifndef STK_SPHERE_H
- #define STK_SPHERE_H
-
- #include "Stk.h"
- #include "Vector3D.h"
-
- namespace stk {
-
- /***************************************************/
- /*! \class Sphere
- \brief STK sphere class.
-
- This class implements a spherical ball with
- radius, mass, position, and velocity parameters.
-
- by Perry R. Cook, 1995--2017.
- */
- /***************************************************/
-
- class Sphere : public Stk
- {
- public:
- //! Constructor taking an initial radius value.
- Sphere( StkFloat radius = 1.0 ) { radius_ = radius; mass_ = 1.0; };
-
- //! Set the 3D center position of the sphere.
- void setPosition( StkFloat x, StkFloat y, StkFloat z ) { position_.setXYZ(x, y, z); };
-
- //! Set the 3D velocity of the sphere.
- void setVelocity( StkFloat x, StkFloat y, StkFloat z ) { velocity_.setXYZ(x, y, z); };
-
- //! Set the radius of the sphere.
- void setRadius( StkFloat radius ) { radius_ = radius; };
-
- //! Set the mass of the sphere.
- void setMass( StkFloat mass ) { mass_ = mass; };
-
- //! Get the current position of the sphere as a 3D vector.
- Vector3D* getPosition( void ) { return &position_; };
-
- //! Get the relative position of the given point to the sphere as a 3D vector.
- Vector3D* getRelativePosition( Vector3D *position );
-
- //! Set the velocity of the sphere as a 3D vector.
- StkFloat getVelocity( Vector3D* velocity );
-
- //! Returns the distance from the sphere boundary to the given position (< 0 if inside).
- StkFloat isInside( Vector3D *position );
-
- //! Get the current sphere radius.
- StkFloat getRadius( void ) { return radius_; };
-
- //! Get the current sphere mass.
- StkFloat getMass( void ) { return mass_; };
-
- //! Increase the current sphere velocity by the given 3D components.
- void addVelocity( StkFloat x, StkFloat y, StkFloat z );
-
- //! Move the sphere for the given time increment.
- void tick( StkFloat timeIncrement );
-
- private:
- Vector3D position_;
- Vector3D velocity_;
- Vector3D workingVector_;
- StkFloat radius_;
- StkFloat mass_;
- };
-
- inline void Sphere::tick( StkFloat timeIncrement )
- {
- position_.setX(position_.getX() + (timeIncrement * velocity_.getX()));
- position_.setY(position_.getY() + (timeIncrement * velocity_.getY()));
- position_.setZ(position_.getZ() + (timeIncrement * velocity_.getZ()));
- };
-
- } // stk namespace
-
- #endif
|