login
Square array a(p,q) read by antidiagonals: a(p,q) = the number of line segments that constitute the trajectory of a billiard ball on a pool table with dimensions p X q, before the ball reaches a corner.
0

%I #20 Aug 12 2018 17:28:07

%S 1,2,2,3,1,3,4,4,4,4,5,2,1,2,5,6,6,6,6,6,6,7,3,7,1,7,3,7,8,8,2,8,8,2,

%T 8,8,9,4,9,4,1,4,9,4,9,10,10,10,10,10,10,10,10,10,10,11,5,3,2,11,1,11,

%U 2,3,5,11,12,12,12,12,12,12,12,12,12,12,12,12

%N Square array a(p,q) read by antidiagonals: a(p,q) = the number of line segments that constitute the trajectory of a billiard ball on a pool table with dimensions p X q, before the ball reaches a corner.

%C The billiard game considered here is an idealized one: the pool table is a rectangle with vertices (0,0), (p,0), (p,q), (0, q); the ball is shrunk to a point and is launched from vertex (0,0) with initial velocity vector (1,1); collisions are supposed elastic and friction is supposed nonexistent, so that the ball can never stop on the table; when the ball bounces, the angle of reflection is equal to the angle of incidence; the ball can only exit through a vertex.

%C a(p,q) counts the line segments that constitute the trajectory.

%F a(p,q) = (p + q) / gcd(p, q) - 1.

%e In a square-shaped pool table, the ball just crosses diagonally. a(p,p)=1.

%e In a pool table of dimensions 2 X 1, the ball bounces once and exits. a(2,1)=2.

%e The square array a(p,q) begins:

%e 1 2 3 4 5 6 7

%e 2 1 4 2 6 3 8

%e 3 4 1 6 7 2 9

%e 4 2 6 1 8 4 10

%e 5 6 7 8 1 10 11

%e 6 3 2 4 10 1 12

%e 7 8 9 10 11 12 1

%o (Java)

%o long a(long p, long q) {

%o long i = 0, x = 0, y = 0, dx = +1, dy = +1, s = 1;

%o while ((((x % p) != 0) || ((y % q) != 0)) || (i == 0)) {

%o i ++; long xx = x + dx; long yy = y + dy;

%o boolean xok = (0 <= xx) && (xx <= p);

%o boolean yok = (0 <= yy) && (yy <= q);

%o if (xok && yok) { x = xx; y = yy; }

%o else { s ++;

%o if (! xok) { dx = -dx; }

%o if (! yok) { dy = -dy; }

%o }} return s; }

%Y Cf. A059026 (the triangle version).

%K nonn,tabl

%O 1,2

%A _Luc Rousseau_, Jun 28 2017