Euclidean Groups

AUTHORS:

  • Volker Braun: initial version
class sage.groups.affine_gps.euclidean_group.EuclideanGroup(degree, ring)

Bases: sage.groups.affine_gps.affine_group.AffineGroup

A Euclidean group.

The Euclidean group E(A) (or general affine group) of an affine space A is the group of all invertible affine transformations from the space into itself preserving the Euclidean metric.

If we let A_V be the affine space of a vector space V (essentially, forgetting what is the origin) then the Euclidean group E(A_V) is the group generated by the general linear group SO(V) together with the translations. Recall that the group of translations acting on A_V is just V itself. The general linear and translation subgroups do not quite commute, and in fact generate the semidirect product

E(A_V) = SO(V) \ltimes V.

As such, the group elements can be represented by pairs (A,b) of a matrix and a vector. This pair then represents the transformation

x \mapsto A x + b.

We can also represent this as a linear transformation in \dim(V) + 1 dimensional space as

\begin{pmatrix}
A & b \\
0 & 1
\end{pmatrix}

and lifting x = (x_1, \ldots, x_n) to (x_1, \ldots, x_n, 1).

See also

INPUT:

Something that defines an affine space. For example

  • An affine space itself:
    • A – affine space
  • A vector space:
    • V – a vector space
  • Degree and base ring:
    • degree – An integer. The degree of the affine group, that is, the dimension of the affine space the group is acting on.
    • ring – A ring or an integer. The base ring of the affine space. If an integer is given, it must be a prime power and the corresponding finite field is constructed.
    • var – (Defalut: 'a') Keyword argument to specify the finite field generator name in the case where ring is a prime power.

EXAMPLES:

sage: E3 = EuclideanGroup(3, QQ); E3
Euclidean Group of degree 3 over Rational Field
sage: E3(matrix(QQ,[(6/7, -2/7, 3/7), (-2/7, 3/7, 6/7), (3/7, 6/7, -2/7)]), vector(QQ,[10,11,12]))
      [ 6/7 -2/7  3/7]     [10]
x |-> [-2/7  3/7  6/7] x + [11]
      [ 3/7  6/7 -2/7]     [12]
sage: E3([[6/7, -2/7, 3/7], [-2/7, 3/7, 6/7], [3/7, 6/7, -2/7]], [10,11,12])
      [ 6/7 -2/7  3/7]     [10]
x |-> [-2/7  3/7  6/7] x + [11]
      [ 3/7  6/7 -2/7]     [12]
sage: E3([6/7, -2/7, 3/7, -2/7, 3/7, 6/7, 3/7, 6/7, -2/7], [10,11,12])
      [ 6/7 -2/7  3/7]     [10]
x |-> [-2/7  3/7  6/7] x + [11]
      [ 3/7  6/7 -2/7]     [12]

Instead of specifying the complete matrix/vector information, you can also create special group elements:

sage: E3.linear([6/7, -2/7, 3/7, -2/7, 3/7, 6/7, 3/7, 6/7, -2/7])
      [ 6/7 -2/7  3/7]     [0]
x |-> [-2/7  3/7  6/7] x + [0]
      [ 3/7  6/7 -2/7]     [0]
sage: E3.reflection([4,5,6])
      [ 45/77 -40/77 -48/77]     [0]
x |-> [-40/77  27/77 -60/77] x + [0]
      [-48/77 -60/77   5/77]     [0]
sage: E3.translation([1,2,3])
      [1 0 0]     [1]
x |-> [0 1 0] x + [2]
      [0 0 1]     [3]

Some additional ways to create Euclidean groups:

sage: A = AffineSpace(2, GF(4,'a'));  A
Affine Space of dimension 2 over Finite Field in a of size 2^2
sage: G = EuclideanGroup(A); G
Euclidean Group of degree 2 over Finite Field in a of size 2^2
sage: G is EuclideanGroup(2,4) # shorthand
True

sage: V = ZZ^3;  V
Ambient free module of rank 3 over the principal ideal domain Integer Ring
sage: EuclideanGroup(V)
Euclidean Group of degree 3 over Integer Ring

sage: EuclideanGroup(2, QQ)
Euclidean Group of degree 2 over Rational Field

TESTS:

sage: E6 = EuclideanGroup(6, QQ)
sage: E6 is E6
True
sage: V = QQ^6
sage: E6 is EuclideanGroup(V)
True
sage: G = EuclideanGroup(2, GF(5)); G
Euclidean Group of degree 2 over Finite Field of size 5
sage: TestSuite(G).run()

REFERENCES:

random_element()

Return a random element of this group.

EXAMPLES:

sage: G = EuclideanGroup(4, GF(3))
sage: G.random_element()  # random
      [2 1 2 1]     [1]
      [1 2 2 1]     [0]
x |-> [2 2 2 2] x + [1]
      [1 1 2 2]     [2]
sage: G.random_element() in G
True

TESTS:

sage: G.random_element().A().is_unitary()
True