Enum rlifesrc_lib::Symmetry[][src]

pub enum Symmetry {
    C1,
    C2,
    C4,
    D2Row,
    D2Col,
    D2Diag,
    D2Antidiag,
    D4Ortho,
    D4Diag,
    D8,
}

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

impl Symmetry[src]

pub fn require_square_world(self) -> bool[src]

Whether this symmetry requires the world to be square.

Returns true for C4, D2\, D2/, D4X and D8.

pub fn require_no_diagonal_width(self) -> bool[src]

Whether this transformation requires the world to have no diagonal width.

Returns true for C4, D2-, D2|, D4+ and D8.

pub fn members(self) -> Vec<Transform>[src]

Transformations contained in the symmetry group.

pub fn cosets(self) -> Vec<Transform>[src]

A list of coset representatives, seeing the symmetry group as a subgroup of D8.

The first element in the result is always Transform::Id.

Trait Implementations

impl Clone for Symmetry[src]

impl Copy for Symmetry[src]

impl Debug for Symmetry[src]

impl Default for Symmetry[src]

impl<'de> Deserialize<'de> for Symmetry[src]

impl Display for Symmetry[src]

impl Eq for Symmetry[src]

impl FromStr for Symmetry[src]

type Err = String

The associated error which can be returned from parsing.

impl Hash for Symmetry[src]

impl PartialEq<Symmetry> for Symmetry[src]

impl PartialOrd<Symmetry> for Symmetry[src]

fn partial_cmp(&self, other: &Self) -> Option<Ordering>[src]

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.

impl Serialize for Symmetry[src]

impl StructuralEq for Symmetry[src]

impl StructuralPartialEq for Symmetry[src]

Auto Trait Implementations

Blanket Implementations

impl<T> Any for T where
    T: 'static + ?Sized
[src]

impl<T> Borrow<T> for T where
    T: ?Sized
[src]

impl<T> BorrowMut<T> for T where
    T: ?Sized
[src]

impl<T> DeserializeOwned for T where
    T: for<'de> Deserialize<'de>, 
[src]

impl<T> From<T> for T[src]

impl<T, U> Into<U> for T where
    U: From<T>, 
[src]

impl<T> ToOwned for T where
    T: Clone
[src]

type Owned = T

The resulting type after obtaining ownership.

impl<T> ToString for T where
    T: Display + ?Sized
[src]

impl<T, U> TryFrom<U> for T where
    U: Into<T>, 
[src]

type Error = Infallible

The type returned in the event of a conversion error.

impl<T, U> TryInto<U> for T where
    U: TryFrom<T>, 
[src]

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.

impl<V, T> VZip<V> for T where
    V: MultiLane<T>,