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{split}\begin{pmatrix} A & b \\ 0 & 1 \end{pmatrix}\end{split}\]

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

Previous topic

Affine Groups

Next topic

Elements of Affine Groups

This Page