"""Lie geometry module.
"""
import numpy as np
from ddg.geometry import laguerre_models, moebius_models
from ddg.geometry._quadrics import Quadric
from ddg.geometry.geometry_model_templates import CayleyKleinGeometry
__all__ = ["ProjectiveModel"]
[docs]class ProjectiveModel(CayleyKleinGeometry):
"""Lie geometry.
.. rubric:: Model space
The model space is the quadric with matrix `diag([1,...,1, -1, -1])` in
RP^{n+2}.
.. Representation of objects
Points in this quadric correspond to oriented hyperspheres and
hyperplanes in R^n.
Parameters
----------
dimension : int
Attributes
----------
dimension : int
"""
@property
def absolute(self):
"""The absolute quadric with matrix ``diag([1,...,1, -1, -1])``.
Returns
-------
ddg.geometry.Quadric
"""
diag = np.ones(self.dimension + 3)
diag[-1] = diag[-2] = -1
return Quadric(np.diag(diag))
@property
def moebius_point(self):
p = np.zeros(self.ambient_dimension + 1)
p[-1] = 1
return ddg.geometry.Point(p)
@property
def moebius_subspace(self):
return self.absolute.polarize(self.moebius_point)
[docs] def moebius(self):
"""Corresponding projective model of Moebius geometry."""
return moebius_models.ProjectiveModel(self.dimension)
[docs] def from_moebius(self, object_, embedded=False):
raise NotImplementedError
[docs] def to_moebius(self, object_, embedded=False):
raise NotImplementedError
@property
def laguerre_point(self):
p = np.zeros(n)
p[[-2, -3]] = 0.5
return ddg.geometry.Point(p)
@property
def laguerre_subspace(self):
return self.absolute.polarize(self.laguerre_point)
[docs] def laguerre(self):
"""Corresponding projective model (Blaschke cylinder) of Laguerre geometry."""
return laguerre_models.ProjectiveModel(self.dimension)
[docs] def from_laguerre(self, object_, embedded=False):
raise NotImplementedError
[docs] def to_laguerre(self, object_, embedded=False):
raise NotImplementedError
def __contains__(self, point):
return point in self.absolute
def __str__(self):
return f"{self.dimension}D Lie geometry"