/// <summary> /// Declares that a tile is symetric, and therefore transforms to iteself. /// This is a shorthand for calling Add(tile,..., tile) for specific rotations. /// </summary> public void AddSymmetry(Tile tile, TileSymmetry ts) { // I've listed the subgroups in the order found here: // https://groupprops.subwiki.org/wiki/Subgroup_structure_of_dihedral_group:D8 switch (ts) { case TileSymmetry.F: GetGroup(tile, out var _); break; case TileSymmetry.N: Add(tile, new Rotation(2 * 90, false), tile); break; case TileSymmetry.T: Add(tile, new Rotation(0 * 90, true), tile); break; case TileSymmetry.L: Add(tile, new Rotation(1 * 90, true), tile); break; case TileSymmetry.E: Add(tile, new Rotation(2 * 90, true), tile); break; case TileSymmetry.Q: Add(tile, new Rotation(3 * 90, true), tile); break; case TileSymmetry.I: Add(tile, new Rotation(0 * 90, true), tile); Add(tile, new Rotation(2 * 90, false), tile); break; case TileSymmetry.Slash: Add(tile, new Rotation(1 * 90, true), tile); Add(tile, new Rotation(2 * 90, false), tile); break; case TileSymmetry.Cyclic: Add(tile, new Rotation(1 * 90, false), tile); break; case TileSymmetry.X: Add(tile, new Rotation(0 * 90, true), tile); Add(tile, new Rotation(1 * 90, false), tile); break; } }
/// <summary> /// Declares that a tile is symetric, and therefore transforms to iteself. /// This is a shorthand for calling Add(tile,..., tile) with the list of transformations /// related to the symmetry. /// </summary> public void AddSymmetry(Tile tile, TileSymmetry ts) { // I've listed the subgroups in the order found here: // https://groupprops.subwiki.org/wiki/Subgroup_structure_of_dihedral_group:D8 switch (ts) { case TileSymmetry.F: break; case TileSymmetry.N: Add(tile, 2, false, tile); break; case TileSymmetry.T: Add(tile, 0, true, tile); break; case TileSymmetry.L: Add(tile, 1, true, tile); break; case TileSymmetry.E: Add(tile, 2, true, tile); break; case TileSymmetry.Q: Add(tile, 3, true, tile); break; case TileSymmetry.I: Add(tile, 0, true, tile); Add(tile, 2, false, tile); break; case TileSymmetry.Slash: Add(tile, 1, true, tile); Add(tile, 2, false, tile); break; case TileSymmetry.Cyclic: Add(tile, 1, false, tile); break; case TileSymmetry.X: Add(tile, 0, true, tile); Add(tile, 1, false, tile); break; } }