+
+void
+bounce(Sprite *a, Sprite *b)
+{
+ float x, y, n;
+ float na, nb;
+
+ x = (b->x + b->w / 2) - (a->x + a->w / 2);
+ y = (b->y + b->h / 2) - (a->y + a->h / 2);
+ n = sqrt(x*x + y*y); x /= n; y /= n;
+
+ na = (x*a->dx + y*a->dy); // sqrt(a->dx*a->dx + a->dy*a->dy);
+ nb = (x*b->dx + y*b->dy); // sqrt(b->dx*b->dx + b->dy*b->dy);
+
+ a->dx += x*(nb-na); a->dy += y*(nb-na);
+ b->dx += x*(na-nb); b->dy += y*(na-nb);
+}