## Ball Bouncing in a circle

Nibbie
Posts: 4
Joined: 2009.07
Post: #1
I am working on a puzzle game for the iphone, I am stuck at figuring out how to bounce a ball within a circle.

any ideas?
Sage
Posts: 1,403
Joined: 2005.07
Post: #2
if the small ball has position P and radius r, the big circle that the small ball is in has position P' and radius r' (r' > r) then as long as the center P of the small circle is within r' - r of P' the small ball is inside.. otherwise it's outside.

Here's pseudocode for that:
Code:
```(define (within-distance d p-1 p-2)   (< (distance p-1 p-2) d)) (define (distance p-1 p-2)   (sqrt (+ (square (- (point-x p-1) (point-x p-2)))            (square (- (point-y p-1) (point-y p-2)))))) ;; easily extended to 3D or more```

If you find from one frame to the next the ball went from inside to outside, You would want to apply a force to the ball so that it bounces back in.. That force would be the 'opposite and equal' one (thanks Newton!). To calculate that force (it's a direction and magniture aka a vector) you can reflect the current velocity of the ball around the line from the point of contact to the center of the bigger circle.

Sir, e^iÏ€ + 1 = 0, hence God exists; reply!
Member
Posts: 749
Joined: 2003.01
Post: #3
The force (impulse) applied to the ball to make it bounce back should be in the direction that goes from the ball's position to the center of the sphere, and it's strength proportional to the dot product between the velocity vector and the normalized vector from the ball to the center (for elastic collisions twice this amount)

Â©hâ‚¬ck Ã¸ut Âµy stuÆ’Æ’ Ã¥t ragdollsoft.com
Nibbie
Posts: 4
Joined: 2009.07
Post: #4
Guys, thanks for the replies. Only thing is I did physics a long time back & I am trying to catch up. It would be awesome if we can break down the steps a little more.

Onto the problem:
The bigger circle is stationary. The smaller circle(ball) is the one moving inside the Bigger circle

here's a picture of what I am thinking.
http://www.flickr.com/photos/60395315@N00/3621325296/

(p1, p2) is the point I want to find.

Do I need to find point (c,d)?
I am thinking I need to solve for the equation between the line (a,b) & (m,n) and the equation of the circle to find (c,d), so I can get the equation of the tangent.
Is that the only way to do that, or is there an easier alternative way to find (c,d)

> To calculate that force (it's a direction and magniture aka a vector) you can
> reflect the current velocity of the ball around the line from the point of
> contact to the center of the bigger circle.

Can you help me with the equations, so I can reflect the velocity. This is where I was stuck.

>The force (impulse) applied to the ball to make it bounce back should be in
>the direction that goes from the ball's position to the center of the sphere
>and it's strength proportional to the dot product between the velocity vector
> and the normalized vector from the ball to the center (for elastic collisions
> twice this amount)
Nibbie
Posts: 4
Joined: 2009.07
Post: #5
Najdorf Wrote:The force (impulse) applied to the ball to make it bounce back should be in the direction that goes from the ball's position to the center of the sphere, and it's strength proportional to the dot product between the velocity vector and the normalized vector from the ball to the center (for elastic collisions twice this amount)

Can you clarify where the position of the ball is, when I take the normalized vector from the ball to the center.
Is the ball at the boundary where its gonna bounce, or is it at a position outside the boundary?
Moderator
Posts: 428
Joined: 2002.09
Post: #6
strikerjax Wrote:Can you clarify where the position of the ball is, when I take the normalized vector from the ball to the center.
Is the ball at the boundary where its gonna bounce, or is it at a position outside the boundary?

It's at the point of bounce.

Here's one way to compute:

1: Calculate where the ball is going to hit the boundary next if it continues along its current vector (i.e. direction of movement.)
2: Calculate distance from current location to bounce location.
3: If distance-to-hit is greater than the distance the ball will travel this frame, then the ball isn't going to hit yet. Move the ball along it's vector the right distance. You are done.
4: Otherwise, move the ball to the collision point.
5. Reflect the original vector of travel around the axis formed by the line between the large circle's center and the point of collision.
6. Calculate how much further the ball will move this frame. Loop over the entire algorithm again until the ball has no more distance to travel.

Note: if you are already computing your motions in terms of forces and masses then you will want to handle this as suggested with force impulses. Didn't sound like you were, so for step 5 I suggested just calculating the reflected vector yourself. You don't even need vector math if you are uncomfortable with that; just use high school trigonometry.

Measure twice, cut once, curse three or four times.
Nibbie
Posts: 4
Joined: 2009.07
Post: #7
Thanks for the detailed steps Matt.

Going by your steps, I understand how to solve for the direction of the resulting vector.

How do I find the magnitude of the vector?
There is a normal vector (N) that is pointing towards the center of the bigger circle from the point of collision. What is the magnitude of this vector?

Is magnitude of N equal to V cos (a), where a is the angle between the Velocity V & the Vector N?

am I thinking this right?

I am sorry about these simple physics questions. Its been a long while since had gone through these calculations, and I am trying to catch up. Most of the online tutorials use the weight of the object to calculate the normal force. Here I am not using the weight, so this got me a little confused, along with the vector calculations. I did find some flash code, but I have to learn flash to find the logic behind it, i think its easier to learn the physics part.