#include "Ball.hpp" #include Ball::Ball(Point& _center, double _p, double _q) : Center(_center), surface(_center, _p, _q), init_h(_center.z), bounce_number(0), crt_time(0), A(_center.z), B(0), U(sqrt(2 * G_CTE * _center.z)), T(0) { } void Ball::_compute_pos() { Center.x = A + B * crt_time - (G_CTE / 2) * crt_time * crt_time; surface.update_center_pos(Center); } void Ball::_compute_T_n() { double swap = T; T = swap + 2/G_CTE * pow(1/2, bounce_number - 2) * sqrt(2 * init_h / G_CTE); } void Ball::_compute_B_n() { B = G_CTE * T + U; } void Ball::_compute_A_n() { A = - G_CTE * T * T / 2 - (U * T); } void Ball::_compute_U_n() { U *= 1/2; } void Ball::update_pos(double dt) { crt_time += dt; if (crt_time >= T) { _compute_T_n(); _compute_U_n(); _compute_A_n(); _compute_B_n(); } _compute_pos(); }