The GL(2,R) action, the Veech group, Delaunay decomposition

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]:

In [4]:
m=matrix([[2,1],[1,1]])

You can act on surfaces with the $GL(2,R)$ action


In [5]:
ss = m*s
ss


Out[5]:
TranslationSurface built from 2 polygons

In [6]:
ss.plot()


Out[6]:

To "renormalize" you can improve the presentation using the Delaunay decomposition.


In [7]:
sss = ss.delaunay_decomposition().copy(relabel=True)

In [8]:
sss.plot()


Out[8]:

The Veech group

Set $s$ to be the double pentagon again.


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

It is best to work in the field in which the surfact is defined.


In [10]:
p=s.polygon(0)
p


Out[10]:
Polygon: (0, 0), (1, 0), (1/2*a^2 - 1/2, 1/2*a), (1/2, 1/2*a^3 - a), (-1/2*a^2 + 3/2, 1/2*a)

The surface has a horizontal cylinder decomposition all of whose moduli are given as below


In [11]:
modulus = (p.vertex(3)[1]-p.vertex(2)[1])/(p.vertex(2)[0]-p.vertex(4)[0])
AA(modulus)


Out[11]:
0.3632712640026804?

In [12]:
m = matrix(s.base_ring(),[[1, 1/modulus],[0,1]])
show(m)



In [13]:
show(matrix(AA,m))


The following can be used to check that $m$ is in the Veech group of $s$.


In [14]:
s.canonicalize() == (m*s).canonicalize()


Out[14]:
True

Infinite surfaces

Infinite surfaces support multiplication by matrices and computing the Delaunay decomposition. (Computation is done "lazily")


In [15]:
s=translation_surfaces.chamanara(1/2)

In [16]:
s.plot(edge_labels=False,polygon_labels=False)


Out[16]:

In [17]:
ss=s.delaunay_decomposition()

In [18]:
ss.graphical_surface().make_all_visible(limit=20)

In [19]:
ss.plot(edge_labels=False,polygon_labels=False)


Out[19]:

In [20]:
m = matrix([[2,0],[0,1/2]])

In [21]:
ms = m*s

In [22]:
ms.graphical_surface().make_all_visible(limit=20)
ms.plot(edge_labels=False,polygon_labels=False)


Out[22]:

In [23]:
mss = ms.delaunay_decomposition()

In [24]:
mss.graphical_surface().make_all_visible(limit=20)
mss.plot(edge_labels=False,polygon_labels=False)


Out[24]:

You can tell from the above picture that $m$ is in the Veech group.