/** * Defines a spheroid, which is a basic interpretaion of the ball when it is * bouncing. **/ #include #include #include "Implicit.hpp" #include "common_structures.hpp" const double PI = 3.141592653589793; class Spheroid : public ImplicitSurface { public: Spheroid(Point& _center, size_t _p, size_t _q); void update_center_pos(Point& _center); void update_radius(); void update_height(); void set_stiffness(size_t _stiffness); void check_horizontal_plan_collision(double& height); void check_vertical_plan_collision(double& abscissa); double operator() (double _x, double _y, double _z) { return (pow(_x - center.x, 2) / pow(q, 2) + pow(_y - center.y, 2) / pow(q, 2) + pow(_z - center.z, 2) / pow(p, 2) -1); } private: /** * p corresponds to the half-height of the ball, * q to the radius of the ball, * V is the volume. Extremely useful to have a constant volume in the * ball **/ Point& center; double p, q; size_t stiffness; double V; void _compute_volume(); };