Add movement on y-axis

This commit is contained in:
Rémi Oudin 2018-02-12 13:54:39 +01:00
parent 247528fe63
commit c2cd75a61c
3 changed files with 12 additions and 5 deletions

View file

@ -2,7 +2,7 @@
#include <iostream> #include <iostream>
#include <cmath> #include <cmath>
Ball::Ball(Point& _center, double _min_height, double _v_x, double _p, double _q) : Ball::Ball(Point& _center, double _min_height, double _v_x, double _v_y, double _p, double _q) :
Center(_center), Center(_center),
surface(_center, _p, _q), surface(_center, _p, _q),
init_h(_center.z), init_h(_center.z),
@ -13,13 +13,15 @@ Ball::Ball(Point& _center, double _min_height, double _v_x, double _p, double _q
B(0), B(0),
U(sqrt(2 * G_CTE * _center.z)), U(sqrt(2 * G_CTE * _center.z)),
T(sqrt(2.0 * _center.z / G_CTE)), T(sqrt(2.0 * _center.z / G_CTE)),
v_x(_v_x) v_x(_v_x),
v_y(_v_y)
{ {
} }
void Ball::_compute_pos(double dt) { void Ball::_compute_pos(double dt) {
Center.z = fmax(0.0, A + B * crt_time - (G_CTE / 2) * crt_time * crt_time + min_height); Center.z = fmax(0.0, A + B * crt_time - (G_CTE / 2) * crt_time * crt_time + min_height);
Center.x += dt * v_x; Center.x += dt * v_x;
Center.y += dt * v_y;
surface.update_center_pos(Center); surface.update_center_pos(Center);
} }
@ -43,6 +45,10 @@ void Ball::_compute_v_x() {
v_x *= 0.5; v_x *= 0.5;
} }
void Ball::_compute_v_y() {
v_y *= 0.5;
}
void Ball::update_pos(double dt) { void Ball::update_pos(double dt) {
crt_time += dt; crt_time += dt;
if (crt_time >= T) { if (crt_time >= T) {
@ -52,6 +58,7 @@ void Ball::update_pos(double dt) {
_compute_B_n(); _compute_B_n();
_compute_T_n(); _compute_T_n();
_compute_v_x(); _compute_v_x();
_compute_v_y();
std::cout << "New bounce :"; std::cout << "New bounce :";
std::cout << "U:" << U << ":"; std::cout << "U:" << U << ":";
std::cout << "A:" << A << ":"; std::cout << "A:" << A << ":";

View file

@ -24,7 +24,7 @@ class Ball {
size_t bounce_number; size_t bounce_number;
double crt_time; double crt_time;
double A, B, U, T; // Coefficients for the physical model. double A, B, U, T; // Coefficients for the physical model.
double v_x; double v_x, v_y;
void _compute_pos(double dt); void _compute_pos(double dt);
void _compute_v_x(); void _compute_v_x();
void _compute_A_n(); void _compute_A_n();
@ -32,7 +32,7 @@ class Ball {
void _compute_U_n(); void _compute_U_n();
void _compute_T_n(); void _compute_T_n();
public: public:
Ball(Point& _center, double _min_height, double _v_x, double p, double q); Ball(Point& _center, double _min_height, double _v_x, double _v_y, double p, double q);
void update_pos(double dt); void update_pos(double dt);
Point getCenter() const {return Center;} Point getCenter() const {return Center;}
double accessT() const { return T;} double accessT() const { return T;}

View file

@ -11,7 +11,7 @@ using namespace std;
int main(int argc, char** argv) { int main(int argc, char** argv) {
int i; int i;
Point center(0,0,10); Point center(0,0,10);
Ball ball(center, 0, 0.25, 1, 1); Ball ball(center, 0, 0.25, 0, 1, 1);
for(i=0; i< 10000; i++) { for(i=0; i< 10000; i++) {
ball.update_pos(0.001); ball.update_pos(0.001);
cout << ball << "\n"; cout << ball << "\n";