half_translation_surfaces
¶
The category of half-translation surfaces.
A half-translation surface is a surface built by gluing Euclidean polygons. The sides of the polygons can be glued with translations or half-translations (translation followed by a rotation of angle π.)
See flatsurf.geometry.categories
for a general description of the
category framework in sage-flatsurf.
Normally, you won’t create this (or any other) category directly. The correct category is automatically determined for immutable surfaces.
EXAMPLES:
We glue all the sides of a square to themselves. Since each gluing is just a rotation of π, this is a half-translation surface:
sage: from flatsurf import Polygon, similarity_surfaces
sage: P = Polygon(vertices=[(0,0), (1,0), (1,1), (0,1)])
sage: S = similarity_surfaces.self_glued_polygon(P)
sage: S.set_immutable()
sage: C = S.category()
sage: from flatsurf.geometry.categories import HalfTranslationSurfaces
sage: C.is_subcategory(HalfTranslationSurfaces())
True
- class flatsurf.geometry.categories.half_translation_surfaces.HalfTranslationSurfaces[source]¶
The category of surfaces built by gluing (Euclidean) polygons with translations and half-translations (translations followed by rotations among an angle π.)
EXAMPLES:
sage: from flatsurf.geometry.categories import HalfTranslationSurfaces sage: HalfTranslationSurfaces() Category of half translation surfaces
- class Orientable(base_category)[source]¶
The category of orientable half-translation surfaces.
EXAMPLES:
sage: from flatsurf import polygons, similarity_surfaces sage: B = similarity_surfaces.billiard(polygons.triangle(1, 2, 5)) sage: H = B.minimal_cover(cover_type="half-translation") sage: from flatsurf.geometry.categories import HalfTranslationSurfaces sage: H in HalfTranslationSurfaces().Orientable() True
- class WithoutBoundary(base_category)[source]¶
The category of orientable half-translation surfaces without boundary.
EXAMPLES:
sage: from flatsurf import polygons, similarity_surfaces sage: B = similarity_surfaces.billiard(polygons.triangle(1, 2, 5)) sage: H = B.minimal_cover(cover_type="half-translation") sage: from flatsurf.geometry.categories import HalfTranslationSurfaces sage: H in HalfTranslationSurfaces().Orientable().WithoutBoundary() True
- class Oriented(base_category)[source]¶
The category of oriented half-translation surfaces, i.e., orientable half-translation surfaces which can be oriented in a way compatible with the embedding of their polygons in the real plane.
EXAMPLES:
sage: from flatsurf import polygons, similarity_surfaces sage: B = similarity_surfaces.billiard(polygons.triangle(1, 2, 5)) sage: H = B.minimal_cover(cover_type="half-translation") sage: from flatsurf.geometry.categories import HalfTranslationSurfaces sage: H in HalfTranslationSurfaces().Oriented() True
- class FiniteType(base_category)[source]¶
The category of oriented half-translation surfaces built from finitely many polygons.
EXAMPLES:
sage: from flatsurf import polygons, similarity_surfaces sage: B = similarity_surfaces.billiard(polygons.triangle(1, 2, 5)) sage: H = B.minimal_cover(cover_type="half-translation") sage: from flatsurf.geometry.categories import HalfTranslationSurfaces sage: H in HalfTranslationSurfaces().Oriented().FiniteType() True
- class ParentMethods[source]¶
Provides methods available to all oriented half-translation surfaces built from finitely many polygons.
If you want to add functionality for such surfaces you most likely want to put it here.
- normalized_coordinates()[source]¶
Return a pair
(new_surface, matrix)
wherenew_surface
is defined over the holonomy field andmatrix
is the transition matrix that maps this surface tonew_surface
.EXAMPLES:
sage: from flatsurf import translation_surfaces, polygons, similarity_surfaces sage: S = translation_surfaces.veech_2n_gon(5) sage: U, mat = S.normalized_coordinates() sage: U.base_ring() Number Field in a0 with defining polynomial x^2 - x - 1 with a0 = ... sage: mat [ 0 -2/5*a^3 + 2*a] [ -1 -3/5*a^3 + 2*a] sage: T = translation_surfaces.torus((1, AA(2).sqrt()), (AA(3).sqrt(), 3)) sage: U, mat = T.normalized_coordinates() sage: U.base_ring() Rational Field sage: U.holonomy_field() Rational Field sage: mat [-2.568914100752347? 1.816496580927726?] [-5.449489742783178? 3.146264369941973?] sage: TestSuite(U).run() sage: T = polygons.triangle(1,6,11) sage: S = similarity_surfaces.billiard(T) sage: S = S.minimal_cover("translation") sage: U, _ = S.normalized_coordinates() sage: U.base_ring() Number Field in c0 with defining polynomial x^3 - 3*x - 1 with c0 = 1.879385241571817? sage: U.holonomy_field() == U.base_ring() True sage: S.base_ring() Number Field in c with defining polynomial x^6 - 6*x^4 + 9*x^2 - 3 with c = 1.969615506024417? sage: TestSuite(U).run() sage: from flatsurf import EuclideanPolygonsWithAngles sage: polygons = EuclideanPolygonsWithAngles((1, 3, 1, 1)) sage: p = polygons.an_element() sage: B = similarity_surfaces.billiard(p) sage: B.minimal_cover("translation") Minimal Translation Cover of Genus 0 Rational Cone Surface built from 2 equilateral triangles sage: S = B.minimal_cover("translation") sage: S, _ = S.normalized_coordinates() sage: S Translation Surface in H_1(0^6) built from 6 right triangles
- class ParentMethods[source]¶
Provides methods available to all oriented half-translation surfaces.
If you want to add functionality for such surfaces you most likely want to put it here.
- holonomy_field()[source]¶
Return the relative holonomy field of this translation or half-translation surface.
EXAMPLES:
sage: from flatsurf import translation_surfaces, polygons, similarity_surfaces sage: S = translation_surfaces.veech_2n_gon(5) sage: S.holonomy_field() Number Field in a0 with defining polynomial x^2 - x - 1 with a0 = ... sage: S.base_ring() Number Field in a with defining polynomial y^4 - 5*y^2 + 5 with a = 1.175570504584947? sage: T = translation_surfaces.torus((1, AA(2).sqrt()), (AA(3).sqrt(), 3)) sage: T.holonomy_field() Rational Field sage: T = polygons.triangle(1,6,11) sage: S = similarity_surfaces.billiard(T) sage: S = S.minimal_cover("translation") sage: S.base_ring() Number Field in c with defining polynomial x^6 - 6*x^4 + 9*x^2 - 3 with c = 1.969615506024417? sage: S.holonomy_field() Number Field in c0 with defining polynomial x^3 - 3*x - 1 with c0 = 1.879385241571817?
- class ParentMethods[source]¶
Provides methods available to all half-translation surfaces.
If you want to add functionality for such surfaces you most likely want to put it here.
- is_translation_surface(positive=True)[source]¶
Return whether this surface is a (half-)translation surface.
This overrides
similarity_surfaces.SimilaritySurfaces.ParentMethods.is_translation_surface()
.EXAMPLES:
sage: from flatsurf import polygons, similarity_surfaces sage: B = similarity_surfaces.billiard(polygons.triangle(1, 2, 5)) sage: H = B.minimal_cover(cover_type="half-translation") sage: H.is_translation_surface(positive=False) True sage: H.is_translation_surface(positive=True) False
- Positive¶
alias of
TranslationSurfaces
- super_categories()[source]¶
Return the categories that a half-translation surface is always a member of.
EXAMPLES:
sage: from flatsurf.geometry.categories import HalfTranslationSurfaces sage: HalfTranslationSurfaces().super_categories() [Category of dilation surfaces, Category of rational cone surfaces]