Kali
If you didn't look at yesterday's lab, and play with the program kali
then you should take some time today and do so. The program is
written in Java and is available at the following link
To run it, click on Run the program
Basically you can pick different symmetries (sets of transformations)
and then draw with different colored pens and see the effect under
the transformations.
There's no assignment for kali, just play around with the different symmetries
and see what kind of interesting patterns you can create.
It might be helpful for the homework, or maybe not!
Examples of Patterns
Examples from
site shown in class
More Examples
Hexagonal Patterns
Pattern Generator
As mentioned in class, there are only 12 patterns you can
generate from a square tile. The object of this lab is
to write a program (a modification of mrcm.m) and
then try to identify as many of those patterns as possible.
We will need three elements to make this work
1. A tile (i.e. a decorated square)
2. A set of transformations
3. A function to apply the transformations to the tile
to see if they are legal and if they are legal to
see if the results are the same as in other cases
1. A tile
As in past labs our figure (in this case a tile) is
just a list of points. As always it is better if you
put it in a script so you can change/revert to it as
needed (I called mine mytile.m). The tile
should start as a square and then you should add some
other internal elements, like this:
pts = [0 0; 1 0; 1 1; 0 1; 0 0; NaN NaN; % a square
0.1 0.9; 0.1 0.7; 0.2 0.7]; % L in upper left corner
If you want the different elements in your tile to be different
colors, you'll need to make a separate list of points for every
color you'll use. Just use any name for them (besides pts).
Once you have your list(s) of points, you can check out how they
look by
plot(pts(:,1),pts(:,2))
or
plot(pts(:,1),pts(:,2),'r')
replacing 'r' with 'k' for black, 'b' for blue, 'g' for green, etc.
2. A set of transformations
Since we want to try alot of different sets of transformations,
I've made a list below of various transformations of the square
(I make no claim that it is complete). You should copy
these transformations to a file (mytrans.m) so you
can add to the list as needed. I hopefully have used
a meaningful naming and numbering system. Change it if
you want.
% transformations of the square
% number edges R=1, B=2, L=3, T=4
% reflections
M1 = [-1 0 2; 0 1 0; 0 0 1];
M2 = [1 0 0;0 -1 0; 0 0 1];
M3 = [-1 0 0;0 1 0 ;0 0 1];
M4 = [1 0 0;0 -1 2;0 0 1];
MD = [0 -1 1;-1 0 1;0 0 1]; % across diagonal
MD2 = [0 1 0;1 0 0;0 0 1];
% 180 rotation in middle of edge
R1 = [-1 0 2;0 -1 1;0 0 1];
R2 = [-1 0 1;0 -1 0; 0 0 1];
R3 = [-1 0 0;0 -1 1; 0 0 1];
R4 = [-1 0 1;0 -1 2;0 0 1];
% 90 rotation at corner
RX14 = [0 -1 2;1 0 0;0 0 1];
RX21 = [0 -1 1;1 0 -1;0 0 1];
RX32 = [0 -1 0;1 0 0;0 0 1];
RX43 = [0 -1 1;1 0 1;0 0 1];
% 180 rotation at corner
R14 = [-1 0 2; 0 -1 2; 0 0 1];
R21 = [-1 0 2; 0 -1 0; 0 0 1];
R32 = [-1 0 0; 0 -1 0; 0 0 1];
R43 = [-1 0 0; 0 -1 2; 0 0 1];
% Translations
Tx = [1 0 1;0 1 0; 0 0 1];
Ty = [1 0 0; 0 1 1; 0 0 1];
Txy = [1 0 1; 0 1 1; 0 0 1];
3. A program
If you have mrcm.m from before you can just modify it so that
it puts the original and all the copies on the same page. That is,
instead of making a list of points from just the images, use
the original set of points also, like this:
p1 = transform(pts,T1);
p2 = transform(pts,T2);
p3 = transform(pts,T3); % do for each transform you have
np = [pts;NaN NaN;p1; NaN NaN; p2; NaN NaN; p3]; % combine the points into one figure
(Note how np contains pts and all the images)
I've written a new version of mrcm.m (I call it tile.m)
and attached it below.
Assignment
Generate as many distinct patterns using a decorated square tile as
you can (there are 12, you should get at least 6).
Print out a picture of each distinct pattern you make.
(Procedure)
If you've named the files as I have above, here's how to go
about working on this problem:
mytile
mytrans
z = tile(pts,4,Tx,Ty);
plot(z(:,1),z(:,2))
title('Tx, Ty')
Repeat the last three steps over and over again, using different
sets of transformations. You can use 1, 2, 3 or as many transformations
as you want. You are looking to see if (1) there are no holes in
the resulting pattern and (2) if there is overlap, they line up
exactly. If both (1) and (2) hold, we'll consider it a legal
tiling, otherwise, we'll consider it illegal.
(Color)
If you want to do colored tiles, hopefully your script mytile.m
creates several lists of points, let's call them pts1 and pts2.
Basically all you have to do is apply the same transformations to
both sets of points and then color the results differently.
z1 = tile(pts1,4,Tx,Ty);
z2 = tile(pts2,4,Tx,Ty);
plot(z1(:,1),z1(:,2),'b',z2(:,1),z2(:,2),'g')
Challenge
Create the transformations and apply the same procedure to one
of the other shapes, like the equilateral triangle.
---------------------------------PROGRAM------------------------------------
tile.m
function np = tile(pts,N,varargin)
T = varargin;
k = size(T,2);
np = pts;
for i = 1:N
xp = np;
for j = 1:k
p = transform(np,T{j});
xp = [xp; NaN NaN; p];
end
np = xp;
end
Mail: ccollins@math.utk.edu