Straight-line flow

Initial version by Pat Hooper whooper@ccny.cuny.edu, Dec 16, 2017.


In [1]:
from flatsurf import *

Acting on surfaces by matrices.


In [2]:
s = translation_surfaces.veech_double_n_gon(5)

In [3]:
s.plot()


Out[3]:

Defines the tangent_bundle on the surface defined over the base_ring of s.


In [4]:
TB = s.tangent_bundle()

In [5]:
baricenter = sum(s.polygon(0).vertices())/5

Define the tangent vector based at the baricenter of polygon 0 aimed downward.


In [6]:
v = TB(0, baricenter, (0,-1))

Convert to a straight-line trajectory. Trajectories are unions of segments in polygons.


In [7]:
traj = v.straight_line_trajectory()

In [8]:
s.plot()+traj.plot()


Out[8]:

Flow into the next $100$ polygons or until the trajectory hits a vertex.


In [9]:
traj.flow(100)

In [10]:
s.plot()+traj.plot()


Out[10]:

We can tell its type.


In [11]:
traj.is_saddle_connection()


Out[11]:
True

You can also test if a straight-line trajectory is closed or a forward/backward separatrix.

Lets do it again but in the slope one direction.


In [12]:
v = TB(0, baricenter, (1,1))

In [13]:
traj=v.straight_line_trajectory()

In [14]:
traj.flow(100)

In [15]:
s.plot()+traj.plot()


Out[15]:

We remark that it follows from work of Veech that the slope one direction is ergodic for the straight-line flow.