/** * Defines a spheroid, which is a basic interpretaion of the ball when it is * bouncing. **/ #include #include #include "Implicit.hpp" #include "common_structures.hpp" #include "PerlinNoise.hpp" #include "FlatGround.hpp" #include "PerlinGround.hpp" const double PI = 3.141592653589793; class Spheroid : public ImplicitSurface { public: Spheroid(const Point& _center, double _min_p, double _p, double _q); void update_center_pos(Point& _center); void update_radius(); void check_ground_collision(const Ground* ground); Cuboid max_bounding_box() const; void check_perlin_collision(PerlinNoise perlin); double operator() (double _x, double _y, double _z) const; virtual Point location_hint() const; 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 **/ double min_p, init_p, p, q; size_t stiffness; double V; void _compute_volume(); };