Straight-Line Flow#

Acting on surfaces by matrices.#

from flatsurf import translation_surfaces

s = translation_surfaces.veech_double_n_gon(5)
s.plot()
../_images/1deca6dc74ed9a6c730682a13a25995a4dfe51c7bb33fc546ee15761b1139dbd.png

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

TB = s.tangent_bundle()
baricenter = sum(s.polygon(0).vertices()) / 5

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

v = TB(0, baricenter, (0, -1))

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

traj = v.straight_line_trajectory()
s.plot() + traj.plot()
../_images/e399d0ebba5c9c18dea431383df4e0e3fbdd89330f8b533ef7dba2bb5caf50c9.png

Flow into the next \(100\) polygons or until the trajectory hits a vertex.

traj.flow(100)
s.plot() + traj.plot()
../_images/ae7bd084c0815ded714cc44b8360fbe1cf877a2c5e17406cb7913be365e41161.png

We can tell its type.

traj.is_saddle_connection()
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.

v = TB(0, baricenter, (1, 1))
traj = v.straight_line_trajectory()
traj.flow(100)
s.plot() + traj.plot()
../_images/cef7be837962808efe4e83d759812133745b093368fa4463f4db17ea8c3a1e1e.png

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