Enum rlifesrc_lib::Symmetry
source · pub enum Symmetry {
C1,
C2,
C4,
D2Row,
D2Col,
D2Diag,
D2Antidiag,
D4Ortho,
D4Diag,
D8,
}
Expand description
Symmetries of the pattern.
For each symmetry, its symmetry group is a subgroup of the dihedral group D8. 10 different symmetries correspond to 10 subgroups of D8.
The notations are stolen from Oscar Cunningham’s Logic Life Search. Please see the Life Wiki for details.
Some of the symmetries are only valid when the world is square, and some are only valid when the world has no diagonal width.
Variants§
C1
C1
.
No symmetry at all.
C2
C2
.
Symmetry under 180° rotation.
C4
C4
.
Symmetry under 90° rotation.
Requires the world to be square and have no diagonal width.
D2Row
D2-
.
Symmetry under reflection across the middle row.
Requires the world to have no diagonal width.
D2Col
D2|
.
Symmetry under reflection across the middle column.
Requires the world to have no diagonal width.
D2Diag
D2\
.
Symmetry under reflection across the diagonal.
Requires the world to be square.
D2Antidiag
D2/
.
Symmetry under reflection across the antidiagonal.
Requires the world to be square.
D4Ortho
D4+
.
Symmetry under reflections across the middle row and the middle column.
Requires the world to have no diagonal width.
D4Diag
D4X
.
Symmetry under reflections across the diagonal and the antidiagonal.
Requires the world to be square.
D8
D8
.
Symmetry under all 8 transformations.
Requires the world to be square and have no diagonal width.
Implementations§
source§impl Symmetry
impl Symmetry
pub const ALL: [Self; 10] = _
sourcepub const fn is_subgroup_of(self, other: Self) -> bool
pub const fn is_subgroup_of(self, other: Self) -> bool
Whether the symmetry group of self
is a subgroup of that of other
,
i.e., all patterns with symmetry other
also have symmetry self
.
For example, the symmetry group of Symmetry::C1
is a subgroup of
that of all other symmetries.
sourcepub const fn require_square_world(self) -> bool
pub const fn require_square_world(self) -> bool
Whether this symmetry requires the world to be square.
Returns true
for C4
, D2\
, D2/
, D4X
and D8
.
sourcepub const fn require_no_diagonal_width(self) -> bool
pub const fn require_no_diagonal_width(self) -> bool
Whether this transformation requires the world to have no diagonal width.
Returns true
for C4
, D2-
, D2|
, D4+
and D8
.
sourcepub fn cosets(self) -> Vec<Transform>
pub fn cosets(self) -> Vec<Transform>
A list of coset representatives, seeing the symmetry group as a subgroup of D8.
The first element in the result is always Transform::Id
.
sourcepub const fn generated_with(self, transform: Transform) -> Self
pub const fn generated_with(self, transform: Transform) -> Self
The symmetry group “generated by” the given symmetry and the transformation. i.e., the smallest symmetry group which is larger than the given symmetry group and contains that transformation.
sourcepub fn generated_by(transforms: impl IntoIterator<Item = Transform>) -> Self
pub fn generated_by(transforms: impl IntoIterator<Item = Transform>) -> Self
The symmetry group generated by the given transformations, i.e., the smallest symmetry group containing all these transformations.
Trait Implementations§
source§impl<'de> Deserialize<'de> for Symmetry
impl<'de> Deserialize<'de> for Symmetry
source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where __D: Deserializer<'de>,
source§impl PartialEq for Symmetry
impl PartialEq for Symmetry
source§impl PartialOrd for Symmetry
impl PartialOrd for Symmetry
source§fn partial_cmp(&self, other: &Self) -> Option<Ordering>
fn partial_cmp(&self, other: &Self) -> Option<Ordering>
We say that symmetry a
is smaller than symmetry b
,
when the symmetry group of a
is a subgroup of that of b
,
i.e., all patterns with symmetry b
also have symmetry a
.
For example, Symmetry::C1
is smaller than all other symmetries.
1.0.0 · source§fn le(&self, other: &Rhs) -> bool
fn le(&self, other: &Rhs) -> bool
self
and other
) and is used by the <=
operator. Read more