Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Support for more geometries #302

Open
videlec opened this issue Apr 20, 2022 · 5 comments · May be fixed by #306
Open

Support for more geometries #302

videlec opened this issue Apr 20, 2022 · 5 comments · May be fixed by #306
Labels
enhancement New feature or request

Comments

@videlec
Copy link
Contributor

videlec commented Apr 20, 2022

I would say that the most general version of flat geometry consists of a bunch of polygons where edges are glued by projective transformations of R^2, that is PGL(3)-structures (this is even more general than what sage-flatsurf supports). In a surface endowed with a projective structure we can still talk about lines in the surface (since projective transformations preserve them). There are many interesting subclasses that are obtained by restricting the groups allowed for gluing

  • convex PGL(3,R)-structures (without singularities at the vertices) are in bijections with Hitchin representations of surface groups in SL(3,R) (Choi-Goldman)
  • when we identify R^2 = C one can restrict to PSL(2,C) or PSL(2,Z)
  • R x SO(2)-structures (SimilaritySurface in sage-flatsurf)
  • SO(2)-structures (the ConeSurface and RationalConeSurface)
  • R-structures and R_+-structures (HalfDilationSurface and DilationSurface)
  • {+/- 1}-structures (HalfTranslationSurface)
@saraedum
Copy link
Member

I would say that the most general version of flat geometry consists of a bunch of polygons …

I just want to point out that a "bunch" could be infinite. I don't want to support infinite surfaces in libflatsurf.

As a general comment, I don't think we loose any generality if we assume that all the polygons are triangles. (We need to store the triangulation map in sage-flatsurf to recover the polygons but I think that can be arranged.)

If we keep everything triangulated, then supporting more general types of surfaces comes down to having some optional gluing information that records how half edge e is glued to half edge -e.

@saraedum
Copy link
Member

@wphooper wrote at flatsurf/sage-flatsurf#160:

Perhaps slope coordinates would be useful for libflatsurf?

Currently, we store a vector for each half edge in a triangulated surface. I don't understand how storing slopes makes much of a difference in practice but I think I did not fully understand what you were proposing.

I imagine that the only thing we really need to do here is to drop the requirement that the vector associated to a half edge v(e) satisfies that v(-e)=-v(e) for the corresponding half edge -e.

@videlec
Copy link
Contributor Author

videlec commented Apr 25, 2022

Indeed, a flat structure would associate to each edge a (linear, projective, ...) transformation m(e) such that m(e) v(e) = -v(-e). For a translation structure we have m(e) = identity. In sage-flatsurf we simplified the possible structures as m(e) is always the unique similarity m(e) mapping v(e) to -v(-e).

@saraedum saraedum linked a pull request Jun 16, 2022 that will close this issue
@saraedum
Copy link
Member

As discussed today, we probably just want to replace the underlying OddHalfEdgeMap with something more general. A structure that does caching of - but (virtually?) resolves what vector(-halfEdge) when there is a cache miss.

@videlec
Copy link
Contributor Author

videlec commented Dec 14, 2022

For the data structure it might be important to keep in mind that for each kind of surface there is a hidden subgroup of scalar multiplicaion z -> a z which is

  • the trivial group for TranslationSurface
  • {+/-1} for HalfTranslationSurface
  • R_{> 0} for DilationSurface
  • R \ {0} for HalfDilationSurface
  • {k-th root of unity} for k-differentials (or RationalConeSurface in sage-flatsurf)
  • {complex number of modulus one} for ConeSurface
  • anything for SimilaritySurface

For each half edge, one has to store an element in this group (which is a complex number in general). For translation surfaces we just not store anything since this is always the identity. However, for any other kind of surfaces it is required to have this extra bit of information.

saraedum added a commit to saraedum/flatsurf that referenced this issue Jan 3, 2023
we postpone this until we have non-triangulated surfaces flatsurf#302 where this
notion is more natural.
@saraedum saraedum added the enhancement New feature or request label Oct 30, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Development

Successfully merging a pull request may close this issue.

2 participants