Bouncing nearly works'
This commit is contained in:
parent
0bae04d802
commit
e3d913fd61
3 changed files with 11 additions and 8 deletions
3
Ball.cpp
3
Ball.cpp
|
@ -24,6 +24,7 @@ void Ball::_compute_pos(double dt) {
|
||||||
Center.x += dt * v_x;
|
Center.x += dt * v_x;
|
||||||
Center.z += dt * v_z;
|
Center.z += dt * v_z;
|
||||||
surface.update_center_pos(Center);
|
surface.update_center_pos(Center);
|
||||||
|
surface.check_horizontal_plan_collision(0.0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Ball::_compute_T_n() {
|
void Ball::_compute_T_n() {
|
||||||
|
@ -48,7 +49,7 @@ void Ball::_compute_v_x(Point normal) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void Ball::_compute_v_z(Point normal) {
|
void Ball::_compute_v_z(Point normal) {
|
||||||
double factor = normal.x / (4*(normal.x + normal.z));
|
double factor = normal.z / (4*(normal.x + normal.z));
|
||||||
v_z *= (0.5 + factor);
|
v_z *= (0.5 + factor);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
14
spheroid.cpp
14
spheroid.cpp
|
@ -3,6 +3,7 @@
|
||||||
**/
|
**/
|
||||||
|
|
||||||
#include "spheroid.hpp"
|
#include "spheroid.hpp"
|
||||||
|
#include <iostream>
|
||||||
|
|
||||||
Spheroid::Spheroid(const Point& _center, double _min_p, double _p, double _q) :
|
Spheroid::Spheroid(const Point& _center, double _min_p, double _p, double _q) :
|
||||||
ImplicitSurface(_center), normal_vector(Point(0,0,1)), min_p(_min_p),
|
ImplicitSurface(_center), normal_vector(Point(0,0,1)), min_p(_min_p),
|
||||||
|
@ -18,11 +19,11 @@ void Spheroid::_compute_volume() {
|
||||||
|
|
||||||
|
|
||||||
void Spheroid::update_radius() {
|
void Spheroid::update_radius() {
|
||||||
q = sqrt((3/4) * V / PI / p);
|
q = sqrt((3./4.) * V / PI / p);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Spheroid::update_height() {
|
void Spheroid::update_height() {
|
||||||
q = (3/4) * V / PI / (p*p);
|
q = (3./4.) * V / PI / (p*p);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -30,10 +31,11 @@ void Spheroid::update_center_pos(Point& _center) {
|
||||||
center = _center;
|
center = _center;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Spheroid::check_horizontal_plan_collision(double& height) {
|
void Spheroid::check_horizontal_plan_collision(double height) {
|
||||||
if ((center.y - p) <= height) {
|
if (((center.y - p) <= height) || (p <= init_p)) {
|
||||||
p = fmin(init_p, center.y-height);
|
p = fmin(init_p, center.y-height);
|
||||||
update_radius();
|
update_radius();
|
||||||
|
std::cout << "p:" << p << "q:" << q << '\n';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -71,6 +73,6 @@ void Spheroid::check_perlin_collision(PerlinNoise perlin) {
|
||||||
|
|
||||||
double Spheroid::operator() (double _x, double _y, double _z) const {
|
double Spheroid::operator() (double _x, double _y, double _z) const {
|
||||||
return (pow(_x, 2) / pow(q, 2)
|
return (pow(_x, 2) / pow(q, 2)
|
||||||
+ pow(_y, 2) / pow(q, 2)
|
+ pow(_y, 2) / pow(p, 2)
|
||||||
+ pow(_z, 2) / pow(p, 2) -1);
|
+ pow(_z, 2) / pow(q, 2) -1);
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,7 +17,7 @@ class Spheroid : public ImplicitSurface {
|
||||||
void update_center_pos(Point& _center);
|
void update_center_pos(Point& _center);
|
||||||
void update_radius();
|
void update_radius();
|
||||||
void update_height();
|
void update_height();
|
||||||
void check_horizontal_plan_collision(double& height);
|
void check_horizontal_plan_collision(double height);
|
||||||
void check_vertical_plan_collision(double& abscissa);
|
void check_vertical_plan_collision(double& abscissa);
|
||||||
Cuboid max_bounding_box() const;
|
Cuboid max_bounding_box() const;
|
||||||
void check_perlin_collision(PerlinNoise perlin);
|
void check_perlin_collision(PerlinNoise perlin);
|
||||||
|
|
Loading…
Reference in a new issue