36

I am interested in the following question.

Consider two identical cylinders (or in 2D, two circles) of radius $r$, with centers separated by a distance $s$. A point particle is released above with a vertical downward velocity, its initial horizontal offset measured by the distance $\xi $ from the midline between the cylinders. The particle travels in straight lines between reflections and undergoes perfectly elastic collisions (i.e. the angle of incidence equals the angle of reflection) with the cylinders’ surfaces.

In the figures below, the parameters are set to $ r = 140 $ and $ s = 300 $.

Clearly, when the particle is exactly in the middle ($ \xi = 0 $), it passes straight through.

When the particle is offset from the middle by a certain amount (e.g. $ \xi = 30 $), it is reflected back.

It appears that there is a critical case in between where the particle bounces infinitely many times between the two cylinders. On one side of this critical case, the particle eventually escapes downwards (as $ t \to \infty $, $ y \to \infty $); on the other side, the particle is reflected back (as $ t \to \infty $, $ y \to -\infty $). Below is the case $ \xi = 21.21$, slightly above the critical case.

Using the bisection method, the critical value $ \xi_c $ under these parameters is found to be approximately $21.20735102$.

My knowledge in dynamical systems is relatively limited. Through some research, I found that this is a type of billiard system. The phenomenon at the critical case appears to be related to chaotic dynamics. Nonetheless, the system gives me a sense of being very simple, intuitive, and, in a sense, "monotonic." This problem appears to possess a certain "locality"—that is, the most crucial aspect is the reflection behavior at the point where the two cylinders are closest. This gives me hope that there might be a way to derive a closed-form solution.

My question is: Can we obtain any closed-form solution for this critical value? If a closed-form solution seems unattainable, is there any other way to mathematically characterize this critical case?

Kuru Kurumi
  • 411
  • 2
  • 6
  • 4
    You say that the particle is "dropped" downward. Just to clarify: There is no gravity in this problem, right? In other words, trajectories are straight lines between bounces, and do not curve under the influence of gravity? – John Barber Feb 20 '25 at 16:25
  • 2
    @JohnBarber Yes, that’s correct. The particle maintains straight-line motion between reflections. I have revised the description. Thank you for pointing it out. – Kuru Kurumi Feb 21 '25 at 22:18
  • 2
    For what its worth - you can reduce your two dimensional parameter space $(r,s)$ to a single parameter by simply assuming WLOG that $r=1$. – K.defaoite Feb 21 '25 at 22:50
  • 1
    For the infinite bounce case, have you considered what the asymptotic bounce looks like? This seems like it would be horizontal between the closest points of the circles. This should be useful. – Paul Feb 22 '25 at 18:38
  • 6
    I believe you can insert a plane down the midline and consider the particle as bouncing between only one sphere and the plane. Simplifies it perhaps a little bit. – dm63 Feb 22 '25 at 23:42
  • 2
    I made a desmos graph for this problem if anyone need it. – Thinh Dinh Feb 23 '25 at 04:49
  • 1
    Some (approximate) empirical data for $\xi_c$ and $r$, holding $s$ fixed at 30: link. Visualization: link – Soham Saha Feb 23 '25 at 15:00
  • 1
    @dm63 I don't think the plane down the midline thing works. Look at the bounces shown in the second image. They would look completely different with a midline plane, and would land at different points on the left cylinder. – John Barber Feb 23 '25 at 15:25
  • 3
    @KuruKurumi the only possible asymptotic behavior is the horizontal line where, if you extend it, goes through the centers. Any ball that crosses this line will keep falling. Any ball that starts going up above the line will keep on going up. You want to look for behavior that never crosses and keeps getting closer to that line. – Paul Feb 23 '25 at 15:36
  • 3
    @JohnBarber The mid plane idea works. You'd see a trajectory like this – Soham Saha Feb 23 '25 at 16:31
  • 1
    Another way to think about this is as tracing the reflections of a light ray, with the two circles now as mirrors. One benefit of this is that there exist simulator tools to quickly play around with this, e.g., https://phydemo.app/ray-optics/simulator/. – Semiclassical Feb 25 '25 at 03:38
  • Following @Semiclassical 's light ray idea, one might also think of the principle of least time. Another way, probably just a vague analogy, is fluid flow through a nozzle, many particles moving together. – Bob Terrell Feb 25 '25 at 10:09
  • You might want to try building a physical model. Use glass jars for the cylinders. Place a printed grid behind the cylinders and study the reflections through a telescope. If you cannot find any jars of good enough optical quality, you can get what you want with a minimum of fine grinding and pitch lappery. Also, if you have non-parallel cylinder axes and reflect from the INSIDE surfaces of the cylinder, you are into a rich world of optical and radio telescopery and solar energy concentrator design. – richard1941 Feb 25 '25 at 18:42
  • @Paul i don't think the existence of a value of $\xi$ giving the "asymptotic case" you describe is guaranteed. that is an example of a homoclinic orbit which is a kind of critical behaviour, but has codimension 2 in the parameter space — by varying only the starting position $\xi$ and not the angle we are looking at a one-dimensional slice of parameters so the transition from "escaping up" to "escaping down" might be discontinuous – tkw Feb 26 '25 at 17:37
  • another way to think about ^ is to go backwards: start from the trajectory bouncing infinitely in the middle and nudge the angle infinitesimally upwards — you wouldn't expect in general that the trajectory will end up going straight upwards once it escapes – tkw Feb 26 '25 at 17:40

2 Answers2

2

Partial analysis of the asymptotic case.

Let’s parameterize the problem by assuming the circles are unit circles with a distance of $d$ between them at their closest (the centers are $d+2$ apart).

Also, let’s just consider the bounces between the middle and the right side.

Let $(y_n,m_n)$ be the absolute slope and height when the the ball passes through the middle on the $n$th time, assume that $y_n,m_n \ll 1$ and let’s ignore all 2nd order effects.

Then, the line will hit the circle at $x$ location (up to 2nd order) $d/2$ and height $z_n=y_n+m_n d/2$.

Then, the circle on the right has slope $1/z_n$, so the slope of the reflection will be (up to 2nd order) $-(m_n+2z_n)$. Thus, we find that:

$$z_n=y_n +m_n d/2$$ $$m_{n+1}=m_n+2z_n$$ $$y_{n+1}=y_n+(m_n+m_{n+1})d/2 $$

Simplifying gives:

$$m_{n+1}=(1+d)m_n +2 y_n$$ $$y_{n+1}=((1+d/2)d)m_n+(1+d)y_n$$

This linear recurrence has eigenvalues $1+d\pm \sqrt{2d+d^2}$. The two roots are inverses of each other. Then, adjacent jumps will get exponentially smaller towards flat and with less distance between each other with the ratio between adjacent jumps and slopes being those eigenvalues.

The eigenvectors are $(1,\pm \sqrt{2d+d^2}/2)$, so that’ll be the ratio between the slope and height. This has the nice consequence that lines near the middle, if extended, will go approximately through the points $(\pm \sqrt{2d+d^2}/2,0)$ which can be verified visibly in the OP’s diagrams.

If this fact were to hold for all ranges, then you’d get an easy answer of the vertical asymptote being directly above one of these points. Unfortunately, the nonlinearities of the problem break this invariant, so approximation is probably your best bet (although maybe there’s a different nice analytic invariant that makes the problem approachable).

Eric
  • 8,378
  • Nice answer! Can you unpack what "bounces between the middle and the right side" means? Is this about using the mirror plane as a simplifying assumption instead of two unit circles? – user326210 Mar 01 '25 at 03:06
  • Yes, that’s what I mean. – Eric Mar 01 '25 at 04:16
2

Here is a numerical calculation that can help characterize the critical position. Now, the problem is scale-invariant, so let us assume that the radius of the cylinders is 1, and let the distance between their centers be expressed as a multiple of the radius. (If we need to scale up this problem, we can simply multiply all of the distances involved by the new radius, which will not affect the qualitative bouncing behavior at all.)

Then the problem really only has one parameter, $d\geq 2$, the distance between the cylinder centers (expressed as a multiple of the radius). And given that distance $d$, we can compute the critical $x$-position from which to fire the initial ray so that earlier positions all escape upward and later positions all escape downward. That critical value is a function of $s$ alone.

Here is a numerically calculated plot, using binary search as before:

Plot of the transition point as a function of separation between the two cylinders

Note that I'm using a coordinate system centered on one of the cylinders, instead of centered on the midpoint between them. This is so that the critical point is always a number between 0 and 1 (ranging from the midpoint of the cylinder all the way to one side).

Of course I hope that my calculations are correct; one reality check is that the critical value approaches $1/\sqrt{2}$ from below as the distance between the cylinders grows large. And indeed, an initial ray fired downward at $x=\frac{1}{\sqrt{2}}$ will reflect off the $45^\circ$ normal in a horizontal line straight toward the other cylinder. This makes sense: as the distance becomes large relative to the radius, the first reflected ray must get closer and closer to horizontal to even have a chance of hitting the other cylinder at such a great distance, let alone re-reflecting at a helpful angle.


Finally, the qualitative behavior I observe:
  1. The function has an asymptotically vertical slope line as you approach d=2 from the right. (Similar to the behavior of the sqrt function.)
  2. The function's leftmost endpoint is (2,1)
  3. The function has a horizontal asymptote of 1/sqrt(2) toward +infinity.
  4. The function is monotonically decreasing everywhere.

I have puzzled over what functional form qualitatively captures this effect, and have not yet discovered a satisfying answer. A curve like $$f(x) \approx 1 + \left(\frac{1}{\sqrt{2}}-1\right)\sqrt{\frac{x-2}{x}}$$ has the correct qualitative endpoint behavior but is not the best fit for small values of $x$.

As a test case, when $r=140$ and $s=300$, we can use $f$ to approximate the critical value of $\xi$ as $\frac{s}{2}-r\cdot f(s/r)$, and we get an estimate of 20.58745 compared to the true value of around 21.2073.


Edit: source code
import numpy as np
from math import inf

def trace_ray(origin, direction): """Trace a ray until it hits the unit circle. Return either (None, +/- infty) if the ray has escaped toward positive or negative infinity, or else (True, new_origin, new_direction)""" A = np.dot(direction, direction) B = 2.0 * np.dot(origin, direction) C = np.dot(origin,origin)-1 discriminant = B*2 - 4A*C

if discriminant < 0 :
    return (None, inf if direction[1] > 0 else -inf)
t = (-B - np.sqrt(discriminant))/(2.0*A)

intersection_point = origin + t*direction # this is equivalently the normal.

reflected_ray = direction - 2*np.dot(direction, intersection_point)*intersection_point
reflected_ray = reflected_ray / np.sqrt(np.dot(reflected_ray, reflected_ray))

return (True, intersection_point, reflected_ray)


def trace_ray_forever(origin, direction, distance=2) : other_circle_center = np.array([distance,0])

while 1:
    result = trace_ray(origin, direction)
    if result[0] is None :
        return result[1] # the ray escapes to +/- infinity 
    else :
        _, origin, direction = result
        origin = np.array([distance-origin[0], origin[1]])
        direction = np.array([-direction[0], direction[1]])

def find_critical_point(distance=2, tol=1e-12, max_iterations=100) : left = 0.0 right = 1.0

for _ in range(max_iterations) :
    if right - left < tol:
        break
    mid = (left + right)/2
    escape_direction = trace_ray_forever(np.array([mid,10]), np.array([0,-1]), distance)
    if escape_direction > 0 : 
        left = mid # ~monotonicity assumption
    else :
        right = mid
return (left+right)/2

def plot_critical_vs_distance() : dmin = 2.5 dmax = 20

distances = np.linspace(dmin, dmax, 50)
distances = np.concatenate([np.array([2.001,  2.1]), distances])
critical_points = []
for d in distances :
    if d < 2.0 :
        critical_points.append(None)
    critical_points.append(find_critical_point(d))

plt.figure(figsize=(10, 6))
plt.plot(distances, critical_points, 'o-')
plt.xlabel('Distance between cylinder centers (d)')
plt.ylabel('Critical x-position')
plt.title('Critical Transition Point vs. Distance Between Balls')
plt.ylim(0, 1)


asymptote_value = 1/np.sqrt(2)
plt.axhline(y=asymptote_value, color='r', linestyle='--', alpha=0.7)

# Add text label with LaTeX formatting
plt.text(0, asymptote_value, r'<span class="math-container">$\frac{1}{\sqrt{2}}$</span>')

plt.grid(True)
# plt.savefig('critical_point_vs_distance.png')
plt.show()


user326210
  • 19,274
  • As the distance between ball centers approaches 2, the critical position should approach.... maybe 1 ? The ray should be fired right in the tiny slot between the 2 balls. Am I wrong ? Anyway, I tried the same approach numerically, and the recursion formula for the ray on $y=m_n x + q_n$ becomes very ugly. – Davide Munari Mar 01 '25 at 08:58
  • It would be nice just to leave a simple "thank you". Well... nevermind. – Davide Munari Mar 01 '25 at 11:05
  • Can you provide the program in your answer? – Thinh Dinh Mar 01 '25 at 11:48