2

I'm trying to let the user draw a paddle that they can then use to hit a ball. However, I cannot seem to get the ball to bounce correctly because the x and y components of the ball's velocity are not lined up with the wall. How can I get around this?

I tried the advice given by Gareth Rees here, but apparently I don't know enough about vectors to be able to follow it. For example, I don't know what exactly you store in a vector - I know it's a value with direction, but do you store the 2 points it's between, the slope, the angle?

What I really need is given the angle of the wall and the x and y velocities as the ball hits, to find the new x and y velocities afterwards.

Community
  • 1
  • 1
user1318195
  • 41
  • 1
  • 2

1 Answers1

6

Gareth Rees got the formula correct, but I find the pictures and explanation here a little more clear. That is, the basic formula is:

Vnew = -2*(V dot N)*N + V
where
V = Incoming Velocity Vector
N = The Normal Vector of the wall

Since you're not familiar with vector notation, here's what you need to know for this formula: Vectors are basically just x,y pairs, so V = (v.x, v.y) and N = (n.x, n.y). Planes are best described by the normal to the plane, that is a vector of unit length that is perpendicular to the plane. Then a few formula, b*V = (b*v.x, b*v.y); V dot N = v.x*n.x+v.y*n.y, that is, it's a scalar; and A + B = (a.x+b.x, a.y+b.y). Finally, to find a unit vector based on an arbitrary vector, it's N = M/sqrt(M dot M).

If the surface is curved, use the normal at the point of contact.

tom10
  • 67,082
  • 10
  • 127
  • 137
  • A nice vector tutorial in a single paragraph! You don't define division though (necessary for finding the unit vector), but it's not hard to fathom that the same rules apply as for the product... simply divide each component of the vector by the scalar. – MattJ Nov 12 '12 at 05:00