Euclidean Groups¶
AUTHORS:
- Volker Braun: initial version 
- class sage.groups.affine_gps.euclidean_group.EuclideanGroup(degree, ring)[source]¶
- Bases: - 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– 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– (default:- 'a') keyword argument to specify the finite field generator name in the case where- ringis 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] - >>> from sage.all import * >>> E3 = EuclideanGroup(Integer(3), QQ); E3 Euclidean Group of degree 3 over Rational Field >>> E3(matrix(QQ,[(Integer(6)/Integer(7), -Integer(2)/Integer(7), Integer(3)/Integer(7)), (-Integer(2)/Integer(7), Integer(3)/Integer(7), Integer(6)/Integer(7)), (Integer(3)/Integer(7), Integer(6)/Integer(7), -Integer(2)/Integer(7))]), vector(QQ,[Integer(10),Integer(11),Integer(12)])) [ 6/7 -2/7 3/7] [10] x |-> [-2/7 3/7 6/7] x + [11] [ 3/7 6/7 -2/7] [12] >>> E3([[Integer(6)/Integer(7), -Integer(2)/Integer(7), Integer(3)/Integer(7)], [-Integer(2)/Integer(7), Integer(3)/Integer(7), Integer(6)/Integer(7)], [Integer(3)/Integer(7), Integer(6)/Integer(7), -Integer(2)/Integer(7)]], [Integer(10),Integer(11),Integer(12)]) [ 6/7 -2/7 3/7] [10] x |-> [-2/7 3/7 6/7] x + [11] [ 3/7 6/7 -2/7] [12] >>> E3([Integer(6)/Integer(7), -Integer(2)/Integer(7), Integer(3)/Integer(7), -Integer(2)/Integer(7), Integer(3)/Integer(7), Integer(6)/Integer(7), Integer(3)/Integer(7), Integer(6)/Integer(7), -Integer(2)/Integer(7)], [Integer(10),Integer(11),Integer(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] - >>> from sage.all import * >>> E3.linear([Integer(6)/Integer(7), -Integer(2)/Integer(7), Integer(3)/Integer(7), -Integer(2)/Integer(7), Integer(3)/Integer(7), Integer(6)/Integer(7), Integer(3)/Integer(7), Integer(6)/Integer(7), -Integer(2)/Integer(7)]) [ 6/7 -2/7 3/7] [0] x |-> [-2/7 3/7 6/7] x + [0] [ 3/7 6/7 -2/7] [0] >>> E3.reflection([Integer(4),Integer(5),Integer(6)]) [ 45/77 -40/77 -48/77] [0] x |-> [-40/77 27/77 -60/77] x + [0] [-48/77 -60/77 5/77] [0] >>> E3.translation([Integer(1),Integer(2),Integer(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 # needs sage.rings.finite_rings Affine Space of dimension 2 over Finite Field in a of size 2^2 sage: G = EuclideanGroup(A); G # needs sage.rings.finite_rings Euclidean Group of degree 2 over Finite Field in a of size 2^2 sage: G is EuclideanGroup(2,4) # shorthand # needs sage.rings.finite_rings 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 - >>> from sage.all import * >>> A = AffineSpace(Integer(2), GF(Integer(4),'a')); A # needs sage.rings.finite_rings Affine Space of dimension 2 over Finite Field in a of size 2^2 >>> G = EuclideanGroup(A); G # needs sage.rings.finite_rings Euclidean Group of degree 2 over Finite Field in a of size 2^2 >>> G is EuclideanGroup(Integer(2),Integer(4)) # shorthand # needs sage.rings.finite_rings True >>> V = ZZ**Integer(3); V Ambient free module of rank 3 over the principal ideal domain Integer Ring >>> EuclideanGroup(V) Euclidean Group of degree 3 over Integer Ring >>> EuclideanGroup(Integer(2), QQ) Euclidean Group of degree 2 over Rational Field - REFERENCES: - random_element()[source]¶
- 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 - >>> from sage.all import * >>> G = EuclideanGroup(Integer(4), GF(Integer(3))) >>> 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] >>> G.random_element() in G True