Jim Hurley jhurley0305 at
Sun Mar 25 11:53:13 CDT 2012


What happens when two ball of equal mass collide ellastically is an exchange in velocities. 

The velocity is a VECTOR. I think that is the source of misunderstanding.

Your right there is  trig involved. For example from "Nine ball..."

function resetVel  xx,yy,xx',yy',vxx,vyy,vxx',vyy'
  put xx,yy into pme
  put xx',yy' into pOther
  put theLineAngle(pme,pOther) into tCentersAngle
  put tCentersAngle into tCa
  put xx,yy,xx+vxx,yy+vyy into tVelVector
  put theLineAngle(tVelVector) into tVa
  put sqrt(vxx'*vxx'+vyy'*vyy') into v'
  put sqrt(vxx*vxx+vyy*vyy) into v

  put xx',yy',xx'+vxx',yy'+vyy' into tVelVector'
  put theLineAngle(tVelVector') into tVa'
  --Angle of the vVector relative to the line joining centers
  put tVa - tCa into tVrA 
  put tVa'- tCa into tVrA'
  put v*cos(tVrA) into vR'
  put v*sin(tVrA) into vT
  put v'*cos(tVrA') into vR
  put  v'*sin(tVrA') into vT'
  put vR*cos(tCa) - vT*sin(tCa) into vxx
  put vR*sin(tCa) + vT*cos(tCa) into vyy
  put vR'*cos(tCa) - vT'*sin(tCa) into vxx'
  put vR'*sin(tCa) + vT'*cos(tCa) into vyy'
  return vxx,vyy,vxx',vyy'
end resetVel

Jim Hurley

>> Geoff Canyon wrote:
> This works only if the balls hit head-on. Otherwise you need to do the
> trig. As a simple example, say there are two balls headed toward each
> other. Each has a radius of 2^.5. Ball A is moving at -2 units per second
> on the x axis, i.e. to the left, and its center has a Y coordinate of 2.
> Ball B is moving at 2 units per second on the x axis, i.e. to the right,
> and its center has a Y coordinate of 0. When the balls collide, they will
> be 2 units apart both horizontally and vertically, hence they collide at a
> 45 degree angle. Let's say that they're at 0,0 and 2,2 at the time of the
> collision. They won't simply exchange velocities. Their original motion on
> the x axis is translated entirely into motion along the y axis. After the
> collision, ball A will have an X coordinate of 2, and be moving at 2 units
> per second on the Y axis, i.e. up. ball B will have an X coordinate of 0,
> and be moving at -2 units per second on the Y axis, i.e. down. You need to
> calculate the angle between the balls at the moment of collision, and use
> the sine and cosine to figure out what happens from there.
> All of the above is from my head so feel free to check me.
> On Sun, Mar 25, 2012 at 8:56 AM, Jim Hurley <
> jhurley0305 at
> >wrote:
> >

More information about the use-livecode mailing list