Direction of normal
I want to make a circle bounce from surfaces when a key is pressed in the way that the ball in NBall does, so that its velocity in the direction of the surface's normal becomes a value that has a constant magnitude and its velocity in the direction that is parallel to the surface does not change. This is not a physics engine question, only a mathematical one. How to do it? I am asking this as I can not yet do vector maths well (I know only its basics).
Simple, you just need to subtract out the normal component from the velocity.
Velocity component parallel to the normal:
vNormal = dot(velocity, n)*n
Velocity component perpendicular to the normal:
vTangent = velocity  vNormal
Your desired normal velocity:
vDesired = n*desired
Putting it all together:
vResult = vTangent + vDesired
Which simplifies to:
vResult = velocity + (desired  dot(velocity, n))*n
Velocity component parallel to the normal:
vNormal = dot(velocity, n)*n
Velocity component perpendicular to the normal:
vTangent = velocity  vNormal
Your desired normal velocity:
vDesired = n*desired
Putting it all together:
vResult = vTangent + vDesired
Which simplifies to:
vResult = velocity + (desired  dot(velocity, n))*n
Scott Lembcke  Howling Moon Software
Author of Chipmunk Physics  A fast and simple rigid body physics library in C.
Thanks. Do I need to find the collision surface's normal myself, as Chipmunk does not seem to have a query for it?
You can get collision normals from the cpArbiter struct passed to your collision handler callback. (See http://files.slembcke.net/chipmunk/relea...cpArbiter)
Scott Lembcke  Howling Moon Software
Author of Chipmunk Physics  A fast and simple rigid body physics library in C.
Possibly Related Threads...
Thread:  Author  Replies:  Views:  Last Post  
Direction formula?  TimMcD  2  5,833 
Nov 11, 2009 11:42 PM Last Post: TimMcD 

Triangle Normal Calculations  merrill541  2  3,501 
Feb 1, 2009 07:06 PM Last Post: merrill541 

Calculating direction of car from normal vector and angle  spinner  1  3,675 
Oct 21, 2006 10:43 AM Last Post: imikedaman 