bouncing/app/bounce.rb

41 lines
763 B
Ruby
Raw Normal View History

2023-11-26 16:21:32 +01:00
# A = old position, c = center of ball, v = current moving vector
def reflection_vector(ax,ay,cx,cy,xv,yv)
# Bouncing of resulting point: R
rx = ax + xv
ry = ay + yv
ux = rx - cx
uy = ry - cy
r = (-ux*cx + ux*ax -uy*cy + uy*ay).to_f / ( ux * ux + uy * uy).to_f
fx = cx + r * ux
fy = cy + r * uy
afx = fx - ax
afy = fy - ay
gx = ax + 2 * afx
gy = ay + 2 * afy
rgx = gx - rx
rgy = gy - ry
return rgx,rgy
end
# x,y further away than r allows?
def bouncing?(x,y,cx,cy,r)
# d(cx,cy,x,y) > r?
d = Math.sqrt((x - cx)*(x-cx) + ( y - cy)*( y - cy))
d > r
end
# if the speed vector is higher than the radius, we are done (2x radius would be still okay actually)
def too_fast?(vx,vy,r)
d = Math.sqrt(vx*vx+vy*vy)
d > r
end