public class RhombBoundary
extends java.lang.Object
implements java.io.Serializable
Yarn
s and their intersections by SimpleRhomb
s.
Each SimpleRhomb corresponds to a rhomb, and each Yarn to a sequence of rhombs,
each of which shares an edge with the last, and all of which have two edges
in the same family of parallel edges.
This class contains methods for creating and modifying such arrangements.Modifier and Type | Field and Description |
---|---|
static int |
BATCH_SIZE
Number of permutations we create before stopping to output interim results.
|
static long |
serialVersionUID
For serialization.
|
static int |
WORK_UNIT_LENGTH
Number of permutations in a WorkUnit.
|
Constructor and Description |
---|
RhombBoundary(int[] angles,
boolean sym)
Public constructor.
|
Modifier and Type | Method and Description |
---|---|
static void |
allValid(int[] i,
boolean sym)
Check all permutations of an input list for
compatibility with all rhombs.
|
static void |
allValid(int[] i,
boolean sym,
java.util.List<java.util.List<java.lang.Integer>> rule)
Check all permutations of an input list for
compatibility with all rhombs.
|
static void |
allValid(int[] i,
boolean sym,
java.util.List<java.util.List<java.lang.Integer>> rule,
int[] pre,
int[] suf)
Check all permutations of an input list for
compatibility with all rhombs.
|
Point |
base(int i)
Find the base of the rhomb at the boundary subedge with this index.
|
java.lang.String |
boundaryString()
Output the angles in termini in reverse order, replacing 2*
Point.N() with 0. |
void |
collapse(Rhomb j)
Remove the rhomb represented by j, if it is on the edge.
|
static RhombBoundary |
createPrototile(int i)
Public static factory method.
|
static RhombBoundary |
createRhombBoundary(int even,
int[] angles)
Public static factory method.
|
static RhombBoundary |
createRhombBoundary(int even,
int[] angles1,
int[] angles2)
Public static factory method.
|
static RhombBoundary |
createRhombBoundary(int even,
int[] angles1,
int[] angles2,
boolean sym)
Public static factory method.
|
static RhombBoundary |
createStarBoundary(int[] i)
Public static factory method.
|
static RhombBoundary |
createSymmetricRhombBoundary(int even,
int[] angles)
Public static factory method.
|
static RhombBoundary |
createTriangleBoundary(int[] a1,
int[] a2,
int[] a3,
int[] triangle)
Public static factory method.
|
boolean |
equals(java.lang.Object obj)
Currently broken.
|
java.util.List<Hex> |
flipTriple(Hex t)
Flip one of the Triples.
|
java.lang.String |
gapString()
Output a list of subrhombs in gap-readable format.
|
static void |
gapString(int[] i1,
int[] i2,
boolean ref,
java.lang.String fileName)
Output a gap file with a full complement of substitutions rules.
|
static void |
gapString(int[] i,
java.lang.String fileName)
Output a gap file with a full complement of substitutions rules.
|
static void |
gapString(int[] i1,
java.lang.String[] saveFiles,
java.lang.String outName)
Output a gap file with a full complement of substitutions rules.
|
java.util.List<Rhomb> |
getEdgeRhombs()
Getter method.
|
java.util.List<Rhomb> |
getJoins()
Getter method.
|
java.util.List<Hex> |
getTriples()
Getter method.
|
int |
hashCode()
Currently broken.
|
static void |
main(java.lang.String[] args)
For testing.
|
static java.lang.String |
matrixString(int[][] i1)
Convert a two-dimensional array of ints to a String.
|
int |
numTriples()
How many Triples are there?
|
void |
postscriptString(java.lang.String fileName)
Write all of the Rhombs to a postscript file.
|
static java.util.List<RhombBoundary> |
prototileList()
Public static factory method.
|
static int[] |
reverse(int[] i)
Create the reverse of an array of ints.
|
void |
setEdgeJoins()
Fill the list of all rhombs that have two
edges on the boundary.
|
void |
setJoins()
Set the Joins of all the Yarns.
|
RhombBoundary |
simplify()
Produce a RhombBoundary representing the same data, but with simpler fields.
|
static int[][] |
substitutionMatrix(int[] i1)
Produce a substitution matrix for the set of all rhombic prototiles with the given
edge sequence.
|
int[] |
tileNumbers()
Get the number of tiles of each type.
|
java.lang.String |
toString()
Output a String.
|
boolean |
valid()
Check for the validity of the crossings.
|
static java.lang.String |
vectorString(int[] i)
Represent an integer vector as a String.
|
int[][][] |
yarnDump()
Output two lists of lists: the first is a list of pairs of
boundary indices, indicating the boundary segments to which each
Yarn is connected.
|
java.lang.String |
yarnString()
Output the results of
yarnDump() as a String. |
public static final long serialVersionUID
public static final int WORK_UNIT_LENGTH
public static final int BATCH_SIZE
public RhombBoundary(int[] angles, boolean sym)
angles
- A list of angle differences. These should be integers
between -N/2 and +N/2. They correspond to the angles (expressed as
integer multiples of pi/Point.N()
) of a sequence of unit-length line segments
that constitute the boundary of the patch.sym
- Tells us if the patch should be made symmetric under
a mirror reflection. This means that we change the signs of the angles
on opposite sides to make indentations exdentations and exdentaions
indentations.public void setJoins()
public void setEdgeJoins()
public java.util.List<Hex> flipTriple(Hex t)
t
- The triple we flip.public void collapse(Rhomb j)
j
- The join representing the rhomb that we wish to remove.public java.util.List<Rhomb> getJoins()
public java.util.List<Hex> getTriples()
public java.util.List<Rhomb> getEdgeRhombs()
public int numTriples()
public static RhombBoundary createRhombBoundary(int even, int[] angles)
createRhombBoundary(int,int[],int[],boolean)
with angles repeated
twice and with the boolean variable sym set to false.even
- One of the angles of the big rhomb that we create,
expressed as an integer multiple of pi/Point.N()
.angles
- A sequence of angle differences that determines the
shape of the four edges of the rhomb.Point.N()
and (Point.N()
-even)*pi/Point.N()
.
It will probably not be tiled symmetrically.public static RhombBoundary createSymmetricRhombBoundary(int even, int[] angles)
createRhombBoundary(int,int[])
except it symmetrizes the boundary.
This entails reversing the edge shapes on opposite sides.public static RhombBoundary createRhombBoundary(int even, int[] angles1, int[] angles2)
createRhombBoundary(int,int[],int[],boolean)
with the boolean
variable sym set to false.even
- One of the angles of the big rhomb that we create,
expressed as an integer multiple of pi/Point.N()
.angles1
- A sequence of angle differences that determines the
shape of the top and left edges of the rhomb.angles2
- A sequence of angle differences that determines the
shape of the bottom and right edges of the rhomb.public static RhombBoundary createRhombBoundary(int even, int[] angles1, int[] angles2, boolean sym)
Point.N()
and (N-even)*pi/N.even
- One of the angles of the big rhomb that we create,
expressed as an integer multiple of pi/N.angles1
- A sequence of angle differences that determines the
shape of the top and left edges of the rhomb.angles2
- A sequence of angle differences that determines the
shape of the bottom and right edges of the rhomb.sym
- Tells us whether or not to symmetrize. When we symmetrize
we reverse the edge shapes on opposite sides. This should only be
done if angles1 and angles2 are the same.public static RhombBoundary createTriangleBoundary(int[] a1, int[] a2, int[] a3, int[] triangle)
a1
- A sequence of angle differences that determines the
shape of the first edge of the triangle.a2
- A sequence of angle differences that determines the
shape of the second edge of the triangle.a3
- A sequence of angle differences that determines the
shape of the third edge of the triangle.triangle
- A list of three integers that represent the angles of
the triangle, expressed as integer multiples of pi/Point.N()
.public static RhombBoundary createStarBoundary(int[] i)
Point.N()
-fold rotational symmetry.
Each edge of this region is constructed using edge sequence i.
There are no checks to make sure that i is well-formed.i
- A sequence of angle differences that determines the
shape of the first edge of the region.public static RhombBoundary createPrototile(int i)
i
- The type of the prototile that is created (less 1).public static java.util.List<RhombBoundary> prototileList()
public RhombBoundary simplify()
SimpleRhomb
instead of
Join
and SimpleHex
instead of Triple
.public boolean valid()
Yarn.valid()
).public java.lang.String toString()
toString
in class java.lang.Object
Yarn
s and their crossings.public boolean equals(java.lang.Object obj)
equals
in class java.lang.Object
public int hashCode()
hashCode
in class java.lang.Object
public Point base(int i)
i
- An index of an element in the Terminus
list.public java.lang.String gapString()
public static void gapString(int[] i1, int[] i2, boolean ref, java.lang.String fileName)
gapString()
on each of them to produce its
associated substitution rule.
It writes all of these substitution rules, with appropriate preamble, to
the file called fileName.i1
- The edge sequence for the top and left edges of the rhombs.i2
- The edge sequence for the bottom and right edges of the rhombs.ref
- Tells us whether or not we're making different substitution
rules for the reflected versions of the prototiles. This is deprecated.fileName
- The name of the file to which we write the gap output.public void postscriptString(java.lang.String fileName)
fileName
- The name of the file to which we write the postscript output.public static void gapString(int[] i1, java.lang.String[] saveFiles, java.lang.String outName)
i1
- An edge sequence. It is only used to compute the inflation
matrix, not to make substitution rules. It should match the inflation
factors for the rhombs in the saved files, but we don't enforce this.saveFiles
- A list of names of saved .rb files containing
serialized RhombBoundaries.outName
- The name of the output file.public static void gapString(int[] i, java.lang.String fileName)
gapString(int[],int[],boolean,String)
, except the boolean variable ref is
set to false, and the same edge sequence i is input for both i1 and i2.public static int[] reverse(int[] i)
i
- The array that we want to reverse.public static void allValid(int[] i, boolean sym, java.util.List<java.util.List<java.lang.Integer>> rule, int[] pre, int[] suf)
i
- The seed that we use to produce edge sequences. All edge
sequences are obtained by permuting i and then applying rule to replace
symbols.sym
- Tells us whether or not to symmetrize the RhombBoundaries
that we construct.rule
- A list of lists. The nth entry tells us how to replace the
number n wherever it appears in the sequence i, or any of its permutations.pre
- A list of ints to prepend to each permutation.suf
- A list of ints to append to each permutation.public static void allValid(int[] i, boolean sym, java.util.List<java.util.List<java.lang.Integer>> rule)
allValid(int[],boolean,List,int[],int[])
, except it does not involve
a prefix or suffix.
sym tells us whether or not to symmetrize the boundaries.
This method writes to stdout all permutations of i that yield
valid tilings for each inflated prototile.i
- The seed that we use to produce edge sequences. All edge
sequences are obtained by permuting i and then applying rule to replace
symbols.sym
- Tells us whether or not to symmetrize the RhombBoundaries
that we construct.rule
- A list of lists. The nth entry tells us how to replace the
number n wherever it appears in the sequence i, or any of its permutations.public static void allValid(int[] i, boolean sym)
allValid(int[],boolean,List)
, except it does not involve a substitution.
This method writes to stdout all permutations of i that yield
valid tilings for each inflated prototile.i
- The seed that we use to produce edge sequences. All edge
sequences are obtained by permuting i.
symbols.sym
- Tells us whether or not to symmetrize the RhombBoundaries
that we construct.public static java.lang.String vectorString(int[] i)
i
- The integer vector for which we produce a String representation.public int[] tileNumbers()
public static int[][] substitutionMatrix(int[] i1)
createRhombBoundary(int,int[])
.Point.N()
/2 x N/2 int matrix, the (i,j)th entry of which is the number of
tiles of type i appearing in the substituted image of tile j.public static java.lang.String matrixString(int[][] i1)
i1
- a matrix of ints that we represent as a String.public int[][][] yarnDump()
public java.lang.String yarnString()
yarnDump()
as a String.public java.lang.String boundaryString()
Point.N()
with 0.public static void main(java.lang.String[] args)