Trying to understand the bouncing ball

Click For Summary
SUMMARY

The discussion focuses on programming a bouncing ball simulation using Unity's C# scripting. Key calculations involve the Coefficient of Restitution (COR), which for a tennis ball is approximately 0.75, and the application of gravity at 9.8 m/s². The user struggles with ensuring that the ball's downward and upward velocities are realistic, particularly in how they change after each bounce. The solution involves correctly applying the COR and understanding the effects of gravity on the ball's motion.

PREREQUISITES
  • Understanding of Unity's C# scripting
  • Familiarity with physics concepts such as velocity, gravity, and the Coefficient of Restitution (COR)
  • Knowledge of basic mathematics, including square roots and powers
  • Experience with game physics and object motion simulation
NEXT STEPS
  • Research "Unity Rigidbody physics" for better object motion control
  • Learn about "Unity Physics Materials" to adjust bounciness and friction
  • Explore "Suvat equations" for more accurate motion calculations
  • Investigate "air resistance effects in game physics" for realistic motion simulation
USEFUL FOR

Game developers, physics simulation enthusiasts, and anyone interested in creating realistic object motion in Unity.

bboyzeez
Messages
7
Reaction score
0
hi all, ok i read another post from this forum about the bouncing ball but i didnt want to start asking questions when i never made the thread

ok so I am programming a program that starts with a ball in the air and it will automatically start to fall here is a simplified look at my code to see where I am going wrong etc...i want help not just the answer as i will need to apply this with other objects in the future


ok:
speed = 9.8 * (Mathf.Pow(Time.time,2))

the ball position then drops in the y-axis due to -speed

when it hits the floor i do the following calculations
downVelocity = Mathf.Sqrt((2 * (9.8 * startingHeight)))
newVelocity = COR * downVelocity
nextBounceHeight = (Mathf.Pow(newVelocity ,newVelocity )) / (2 * 9.8);

and then to send the ball back up i change the -speed to just speed

now my problems i am getting are:
the speed of when it falls is the same as when it bounces in air, surely I am missing something that takes away the newvelocity? and then also looking at this the downVelocity will always be the same surely that isn't right?
 
Physics news on Phys.org
bboyzeez said:
newVelocity = COR * downVelocity
...
the speed of when it falls is the same as when it bounces in air

Only if COR (the Coefficient of Restitution) is 1.
 
so say I am imitating a tennis ball the COR is roughly 0.75 (going on what someone wrote in other thread)

i think my problem maybe i apply gravity in beginning but never add a force(if any) so when it hits the floor how does the new velocity alter the speed in which it bounces back up?
 
Oh I see the problem...

bboyzeez said:
and then to send the ball back up i change the -speed to just speed

No, speed here is just velocity without the sign attached so change the speed to COR x speed.

Velocity simply means speed measured in a particular direction.
 
ahh I am confused... ok so let me change it around

velocity = force + gravity * (Mathf.Pow(Time.time,2))

so when ball is in air to start it has no force only gravity...

when it hits the floor i get the velocity
downVelocity = Mathf.Sqrt((2 * (9.8 * startingHeight)))
then i work out the new velocity (here is my problem)
newVelocity = COR * downVelocity <<<so I am saying my ball imiates a tennis ball which cor is 0.75 this correct?

then i say my force now will be the new velocity in which it slows down the speed of the bounce?
 
No.

bboyzeez said:
velocity = force + gravity * (Mathf.Pow(Time.time,2))
This should be velocity = velocityInitial - gravity * Time.time (with positive velocity representing upwards motion which is the usual convention).

bboyzeez said:
newVelocity = COR * downVelocity <<<so I am saying my ball imiates a tennis ball which cor is 0.75 this correct?
Due to the change of direction this should be newVelocity = (- COR * downVelocity)

bboyzeez said:
then i say my force now will be the new velocity in which it slows down the speed of the bounce?
No, gravity is the force which slows down the speed of the bounce according to the equation above.

There are other equations which may be useful, try googling "coefficient of restitution" and "suvat equations" ("suvat" refers to standard abbreviations where s is distance, u is initial velocity, v is velocity, a is acceleration and t is time).
 
  • Like
Likes 1 person
oh ye forgot to mention my axis is inverted but i understand what you meant :) the ball now bounces up and gets a lower bounce height until it comes to a stop but its speed of how it moves is always the same... how do you make it go slower on the bounce back up?
 
ok so this is where I am at...

What is the velocity after the bounce? Use the COR:

vi=(COR)(vf)So this is the initial velocity of the second bounce. How high does it get? Again use the conservation of energy, but the other way around:

12mv2=mgh⟹h0=v2i/2gThis is how high up the second bounce gets. What is the formula for this flight? Same as before:

h=h0−12gt2... so i drop a ball(mass 5kg) from 30m high straight down...i use the formula to work out the downward velocity which I am getting is 24.26108 and then the formual above to work out upward (assuming the cor of my ball is 0.75) and i get upward velocity of 18.19581. the formula to work out next height gives me the next height is at 16.875. so now i want to send the ball back up but when i enter the upward velocity is just shoots up very fast...

how do you make it so it slowly loses all speed as it reaches its new height so it looks realistic? incase above is hard to follow ill write out nicer here

ball(mass) = 5kg
gravity = 9.81
starting height = 30m
COR = 0.75
downward velocity = 24.26108
upward velocity = 18.19581
newHeight = 16.875
 
possibly is it air resistance that slows a ball down when traveling upwards?
 
  • #10
bboyzeez said:
possibly is it air resistance that slows a ball down when traveling upwards?

Gravity is acting to slow the ball when it's moving upward... If the ball bounces up from the ground at time ##T## with upwards speed ##V## its upward speed at later times will be ##V-g(t-T)##.
 
  • #11
Air resistance is only a secondary effect; it's gravity that reduces the vertical component of velocity and gives the familiar parabolic trajectory. The horizontal component of velocity will not change on a smooth surface but COR tells you how much the vertical component changes.
The bounces will 'look' ok without any other computations but adding a small speed reduction in flight, proportional to, say, the square of the speed and a small horizontal velocity reduction per bounce will make things look better. Do it in stages and you can enjoy the process more.
 
  • #12
thanks i just got home so will spend next few hours getting it to work better thanks
 

Similar threads

Replies
8
Views
2K
  • · Replies 10 ·
Replies
10
Views
3K
  • · Replies 14 ·
Replies
14
Views
4K
  • · Replies 5 ·
Replies
5
Views
3K
  • · Replies 19 ·
Replies
19
Views
7K
  • · Replies 3 ·
Replies
3
Views
2K
  • · Replies 1 ·
Replies
1
Views
2K
Replies
3
Views
1K
  • · Replies 1 ·
Replies
1
Views
2K
  • · Replies 1 ·
Replies
1
Views
6K