/*************************************************************************** File: PBMCircleParticle.h Created: 03/31/2002 Author: Maxim Garber Computer Science Department University of North Carolina - Chapel Hill garber@cs.unc.edu Description: A particle constrained to a circle. ----------------------------------------------------------------------------. Copyright 2002 Maxim Garber UNC Collide Research Group *****************************************************************************/ #include "ODESolver.h" class PBMCircleParticle : public ODESystem { public: //////////////////////////////////////////////////////////////////////////// // constructor & destructor PBMCircleParticle(float center[2], float radius, float theta, float mass, float damping, ODESolver* solver); ~PBMCircleParticle(); //////////////////////////////////////////////////////////////////////////// //simulation void Update(float timeStep); //////////////////////////////////////////////////////////////////////////// // ODE derivative virtual void ODEDerivative(const ODEConfig& config, float time, ODEConfig& derivative); //////////////////////////////////////////////////////////////////////////// // accessors void GetParticlePosition(float& x, float& y); void GetCircleCenter (float& x, float& y){x = _center[0]; x = _center[1];} float GetCircleRadius (){return _radius;} float GetMass (){return _mass; } float GetTheta (){return _theta; } //////////////////////////////////////////////////////////////////////////// // mutators void SetCircleCenter (float center[2] ){_center[0] = center[0]; _center[1] = center[1];} void SetCircleRadius (float radius ){_radius = radius; } void AddForce (float force[2] ){_force[0] += force[0]; _force[1] += force[1]; } void SetSolver (ODESolver* solver ){_solver = solver; } void SetDamping (float dampingFactor){_dampingFactor = dampingFactor; } void SetMass (float mass ){_mass = mass; } //////////////////////////////////////////////////////////////////////////// // rendering void Draw(); private: // circle position and radius float _center[2]; float _radius; // particle location and angular velocity float _theta; float _thetaDot; // physical properties float _mass; float _dampingFactor; // force on particle in euclidean space float _force[2]; // ordinary differential equation solver ODESolver* _solver; };