Initial version by Pat Hooper whooper@ccny.cuny.edu, Dec 16, 2017.
In [1]:
from flatsurf import *
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]:
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]:
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]:
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]:
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]:
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.