7-9.01.2014 Assignment6: Project description

Today in class I presented a project which I have been working on, on and off, for several years.  It is a visualization of the Schatz linkage.  You can access the webstart I showed here. The video I showed at the beginning of the class can be seen here. The pictures of the wooden oloid which Thomas Neukirchner made can be found here. Thomas’s diagrams and plywood models of the oloid can be found here.  The latest edition of Paul Schatz’s book Die Welt ist Umstülpbar: Rhythmusforschung und Technik can be found here on Amazon.  If you are interested in this theme then mark your calender for April 4-6, when there will be a weekend event in Berlin devoted to themes related to Paul Schatz’s research.  A few more details can be found here.

On Thursday, Jan. 9, we will take some time to evaluate this “project presentation” in regard to the various criteria mentioned in the evaluation handout.  Be there or be square!  I will also discuss the half-edge data structure and demonstrate some advanced features of the discretegroup package, and, if time permits, more!

Assignment 6: As discussed in class on our final meeting before the holidays, the next assignment is not a programming assignment but rather a planning assignment.  I ask you to enter a description of your project as a comment to this blog post.  Use the account name studentmv with the clever password.  Please  sign your comment with either your name(s) or with your student number(s).  Your comments are due as usual on Friday at midnight.  (That’s Friday Jan. 10).   The details of the description are provided below, but first comes a “news flash” regarding a change in the way property files are handled in the basic template.Assignment class.

Improved way to provide property files. Although I didn’t do much work over the holiday break, I did play around some with webstarts — enough to realize that the current way that property files are handled doesn’t work with webstart technology.  So I’ve figured out a new way to handle property files that does work with webstarts, and has other advantages.  Here’s how it works:

  • If you have a class named MyAssignment.java that inherits from template.Assignment, then store off the properties in a file named myAssignment.xml (note the leading lower case letter!) in the same folder as MyAssignment.java. Implement the method getPropertiesFile() to return null.  Or, remove your implementation of the method, it’s no longer an abstract method and by default it returns null.
  • That’s all you have to do.  Now your class should read the property file correctly whether run “normally” or as a webstart application (which your project application will ultimately need to do).
  • Please try this out to make sure it works for you — if you don’t change anything the old code will continue to work but you should get used to using the new approach.

What to include in your description. 

  1. Mathematics. The description should begin with the mathematical content of the project.  Try to be as precise and accurate.  Zoom in gently — make clear to which domain of mathematics this content belongs.  Use technical language if necessary to specify this.  If possible, include one or two references (either articles or books) which provide a more detailed description of the context of your project.  None of the projects exists “in a vacuum”, give a pointer to your point(s) of departure.
  2. Software design. Begin this section by a statement describing the concrete goal of your project.  For example, “We intend to create an application to allow the user to explore the 3-dimensional kaleidoscopes introduced above [in the mathematical section].”  Describe then the software tools and building blocks you think you will need in order to realize this aim, and how they will be put together.  For example, building blocks might include “jReality geometry factories, the de.jtem.halfedge package, and the de.jtem.discretegroup package”; additionally indicate which parts of these building blocks you will use and how they will be combined.  Think if this as the blueprint for your project.  Of course at this stage of the planning it shouldn’t be too detailed.
  3. User experience. Finally, briefly indicate how you envision a typical “usage cycle” of your program.  What choices does the user have, how can he/she interact with the software sketched in the previous section?  Can the user save the state of the program from one invocation to the next? Will you rely on sliders and dials, or have you ideas for innovative interactive tools?  Will your application be particularly aimed at the PORTAL? Will there be a connection to 3D printing?


17-19.12 Magic Theorems

New Math this week:  the main results this week involved the so-called Magic Theorems, that establish important results about the orbifold notation we have been learning to use to name symmetry groups.  To understand the theorems we need to introduce the basic symbols for the notation.

  • $\large *$ Represents a mirror line
  • X Represents a glide reflection
  • $n\in \mathbb{N}$ represents a natural number $n > 1$, a rotation center of order $n$.
  • $O$ represents a pattern without any of the above features.

To each of these symbols there is a cost associated.  By considering all possible valid strings consisting of these symbols, one can then associate to each string a cost by summing over the costs associated to the constituent symbols.  One obtains some beautiful theorems.  But first we need to introduce some further concepts.

The Euler characteristic of a surface.   Suppose I have a set of polygons with the property that every edge is shared by exactly two polygons.  This set of polygons is called a 2-complex and determines a two-dimensional surface without boundary. Consider 2-complexes which yield the 2-sphere as surface.  Let V, E, and F denote the number of vertices, edges, and faces, resp. in the 2-complex. Then we showed by considering the platonic solids that $V-E+F=2$ for these surfaces, and gave reasons to believe that this relation is always true.  We define the associated function for a 2-complex $c$: the Euler characteristic $\lambda(c) := V-E+F$.  For a 2-sphere, $\lambda(c) = 2$.  Considering the 1-holed torus we showed that $\lambda(c)=0$ and, in general, for n-holed tori, $\lambda(c) = 2-2n$.

Euler characteristic of orbifolds. By considering the orbifolds we have been studying, we were able to extend the notion of Euler characteristic to these spaces, too.  The key idea is to introduce fractional points and edges at points and edges which are fixed by some group element.  One determines the fractional weights so that the resulting weights add up to 1 wherever the stabilizer of the group is non-trivial.  That is, make sure that the statement: “The copies of the fundamental domain cover the plane (or sphere) without overlap” remains true.

The cost function.  The cost function is defined as follows:

  • $k(*) = k(X) = 1$,
  • $k(n) = \dfrac{n-1}{n}$ if it comes before any $*$ in the string, otherwise $k(n) = \dfrac{n-1}{2n}$.
  • $k(O) = 0.

Example: Let $s = 235$.  Then $k(x) = \dfrac{1}{2}+ \dfrac{2}{3} + \dfrac{4}{5} = \dfrac{118}{60}$.

Magical theorem for spherical groups:  Let $s$ be a valid string consisting of the above symbols.  Then the cost function $k(s) < 2$ exactly when $s$ describes a spherical orbifold $\mathcal{O}$.  In this case, the Euler characteristic of $\mathcal{O}$ is $\lambda({\mathcal{O}}) = 2-k(s)$, and the symmetry group of  $\mathcal{O}$ has order $\dfrac{1}{\lambda({\mathcal{O}})}$.

Example:  Applied to $235$, one obtains that this orbifold has Euler characteristic $\dfrac{1}{60}$ and the symmetry group has order 60.

There is a similar, simpler theorem for wallpaper groups.

Magical theorem for spherical groups:  Let $s$ be a valid string consisting of the above symbols.  Then the cost function $k(s) = 2 $ exactly when $s$ describes a spherical orbifold $\mathcal{O}$.

Further research: Note that the theorem makes no claims regarding the order of the group, since they are all infinite groups.One important invariant of a wallpaper group is the order $O_T$ of the translation group within the full group.  Can you find a way to derive this invariant from the Conway-Thurston orbifold notation for the group?

Further reading:  See the book Symmetry of Things by John Conway, et. al., Chs. 3, 4, and 6 for details and proofs of all the above themes and claims.  The book can be found  in the math library “Apparat”.

10-12.12 Still more symmetry groups

Important scheduling decision: Today in class we determined that the presentations for the summer semester would be held during the  first two weeks Tuesday, April 1 – Friday, April 11, although lectures begin only on April 14.  This choice was proposed by Mr. Gunn, since Easter school vacations run from April 14-April 28 and he has plans for family vacation during this time.  It’s also likely that getting the presentations over before the semester lectures start will be healthy for everyone involved.

Important calendar dates this year.  Mr. Gunn can’t resist pointing out the following dates from this semester are … well if not significant at least interesting:

  • 7.11.13   The last time three consecutive primes will occur in a date until next century.
  • 5.12.13   A Pythagorean triple date.  This won’t happen again until 17.8.15 — Mr. Gunn believes.  Can anyone prove or disprove this?
  • 11.12.13  Three consecutive whole numbers.  Won’t happen again until next century.

List of Projects.  Here is a list of possible projects from Mr. Gunn’s fantasy land. Also, take a look at last year’s projects to see how such an idea can be implemented.  The projects entitled “Creation of Escher Tilings”, “A 3D Kaleidoscope” and “Dynamical Wallpaper Patterns” could be reworked again this year as there remains quite a lot to do. Of course you’re encouraged to come up with your own project ideas also.  I would like to meet with each team before Christmas to discuss the state of your project! One possibility would be to use the tutorials next week for this purpose.  If there are no objections I’ll prepare a sign-up sheet to pass around on Thursday’s lecture. (12.12.13).

Wallpaper group resource: The following chart  contains a list of all 17 wallpaper groups including the standard fundamental domains and the generators used in the discretegroup WallpaperGroup class.

The 17 wallpaper groups

The 17 wallpaper groups

George Hart videos.  I encourage you to take a look at the mathematical videos from George Hart, an American mathematician who does lots of interesting stuff with symmetry groups.  In particular, check out the videos involving group mathematical sculpture constructions (“Geometric barn-raising”). For example, this one.  I think we should consider doing something like this as a class after we come back from Christmas and hanging the result in the ground floor of the math building (outside of the lecture hall 005, etc).

10.12 Mathematics. Mr. Gunn introduced the remaining spherical groups, the ones that do not preserve 2 antipodal points.  They are the symmetry groups of the platonic solids. To be precise, the groups and the platonic solids are:

  • *233    tetrahedron
  • *234    cube and octahedron
  • *235    pentagon dodecahedron

There are also the rotational subgroups of these groups: 233, 234, and 235.

Mr. Gunn explained how the fundamental region for these groups can be arrived at by splitting an equilateral spherical triangle into 6 smaller right triangles with angles $\dfrac{\pi}{2},\dfrac{\pi}{3},\dfrac{\pi}n$ for $n\in \{3,4,5\}$.  As a result these groups are known as triangle groups.  Check out the triangle group application here, or access it in eclipse via “Referenced Libraries->discretegroupCGG.jar->discreteGroup.demo.TriangleGroupDemo.class” then right-click and “Run as …->Java application”.

3*2. Finally there is the group 3*2 which has three mutually perpendicular mirrors which split the sphere into 8 right-angled triangles; in the center of the triangle is a rotation center of order 3.  Assignment5 doesn’t work quite right with this group, you are encouraged to fix it and send Mr. Gunn the result.

Euler characteristic.  In discussing the platonic solids Mr. Gunn pointed out that the number of vertices V, the number of edges E, and the number of faces F in all the platonic solids obey the law $V-E+F=2$.  He showed that standard operations to insert faces, edges, or vertices also leave the value of $V-E+F$ invariant.  This value is called the Euler characteristic of the surface E(S).  It is a topological invariant of the surface (in this case the sphere).  By considering a torus rolled up out of a single quadrilateral, one was able to calculate that for the torus $E(S) = V-E+F=0$.  For a two-holed torus one can show (by folding it up from 1 octagon) that $E(S) = V-E+F=-2$.

In general, E(S) = 2$(1-g)$ where $g$ is the genus of the surface (the number of holes it has). Mr Gunn claimed but postponed proving that the Thurston-Conway notation for 2-orbifolds and 2-manifolds has a close connection to the Euler characteristic.  He indicated that if one takes the name of an orbifold $\mathcal{O}$ as a sequence of symbols, one can attach a “cost” function K(s) to each symbol $s$ in such a way that the sum $\Sigma$ of the costs of all the  symbols satisfies $E(\mathcal{O}) = 2-\Sigma$.  Of course one also has to define what is meant by the Euler characteristic of $\mathcal{O}$, since up til now we only know what it means for a sphere or other compact orientable surface. So that will happen on Thursday 12.12

Christmas ornament application. To demonstrate these groups, Mr. Gunn hooked up the beamer and fired up template.Assignment5 from the git repository.  There’s a blog post on this application here and an image album here. You’re encouraged to play with this application to get a feel for these spherical groups.

9.12 Assignment5

Update 16.12.13: I’ve fetched all the Assignment5’s I could find.  If there was a problem with yours, I’ve sent you an e-mail.  Otherwise, I’ve created a picture gallery containing all the images so far received — there are 13 so we could make a lunar calendar with them!  As you see, about half are derived from the Assignment5 I distributed and the other half are original.  I’m pleased with the variety of the images. One small problem is that I don’t know how to label the images. If you’d like to have a label attached to your image — and I think that would be a good thing — please e-mail me the text for the label. Try describing it in 50 words or less.

I’ve described what I expect for Assignment5 in this blog post.  However if you are having trouble generating an image, I’ve checked in an Assignment5 class to the repository.  It’s an application which uses some symmetry groups of the 2-dimensional sphere to create Christmas ornaments.  You are free to adapt it to create an image for the Christmas calendar.  Just be sure that you find a way to customize the code to add new functionality, using the existing code to make an image is not acceptable.  I wasn’t able to document the code exhaustively but it should be possible to understand what’s going on well enough to modify it.

The application uses instance of the class TriangleGroup. There is a choice of 3 diferent plugins:

  1. Default: use default triangle in which the three vertices lie on the surface of the sphere.
  2. Perpendicular cut is more complex.  One chooses one of the 3 vertices and creates a new triangle lying in the tangent plane to the sphere at this vertex. To obtain the other vertices, the lines joining the original vertices to the origin are extended until they cut this tangent plane. Furthermore, for rotation groups, the original triangle is doubled to obtain a true fundamental domain.  Furthermore a piece of the boundary of this region is saved off into a field curve of type double[][].  This isn’t used directly by this class but subclasses (such as Twirly below) can use it to generate interesting geometry.
  3. Twirly builds on the polygon  P found above to create a surface by iteratively applying a matrix to a subset of the boundary of P.  The matrix is determined by 3 real parameters: a scale, a translate, and a rotation angle. The code shows the use of the class CurveCollector, which allows you to construct a surface swept out by a series of curves (each of the same number of vertices).
    1. For a related application showing the use of such an “iterated matrix” run the ElephantTrunk webstart, or create a run configuration in eclipse: run “charlesgunn.jreality.viewer.PluginSceneLoader” with the program argument “charlesgunn.jreality.worlds.ElephantTrunk”.

Images. The following images show first the default fundamental region.  The next three show the perpendicular cut with the 3 different choices of vertex.  Finally, there are some images showing the Twirly plugin at work.

You can also use template.Assignment5 as the basis for the actual Assignment5, to create an image for our Christmas calendar.  To use it for this you’ll need to write a plugin class that does more than what the template version provides. The possibilities are endless (IMHO).

You can see all the images as a single album at my Google+ photo site.assg5-deftri-transp-01assg5-perpCut-0-transp-01assg5-perpCut-1-transp-01assg5-perpCut-2-transp-01

The twirly plugin acting on the group 234 with perpendicular cut at vertex with order-4 rotation.

The twirly plugin acting on the group 234 with perpendicular cut at vertex with order-4 rotation.


A single copy of the Twirly surface for the group 234 (group of order 24).

A single copy of the Twirly surface for the group 234 (group of order 24).

The remaining images show results for the Twirly plugin, using a variety groups, and a variety of settings for the parameters for constructing the matrix.assg5-2013-twirly-235-negTr-v0-01


An example of the group 3*2, the only point group containing a mirror which is not a mirror group.

An example of the group 3*2, the only point group containing a mirror which is not a mirror group.


Group 235 flattened at order-2 rotation center

Group 235 flattened at order-2 rotation center

Group 235 flattened at order-5 rotation.

Group 235 flattened at order-5 rotation.

Group 234 flattened at order-2 rotation.

Group 234 flattened at order-2 rotation.

Group 234 flattened at the order-2 rotation

Group 234 flattened at the order-2 rotation


3-5.12 Normal Subgroups and More

Note: The tutorials next week will meet in the PORTAL (Second floor, same end of the building as BMS).  We will have a demo of the facilities there, including the 3D printing and scanning area.

Assignments. The continuation of Assignment 4 is described in the previous post.  It’s due this Friday Dec. 6.   Assignment 5 — creation of a Christmas calendar image — is also described there.  It’s due on Dec. 13.  December 9: See this update.

03.12.13:  Mr. Gunn continued the guided tour of the planar symmetry groups by considering symmetry groups of the plane with 2 independent translations: the wallpaper groups.  In contrast to the frieze groups, they can have rotational symmetries of order greater than 2.

Wallpaper group application. You can  run a jReality wallpaper group application from your eclipse project by navigating in the Package Explorer to “Referenced Libraries->discretegroupCGG.jar->discreteGroup.wallpaper.WallpaperPluggedIn.class” and then using right-mouse click to choose “Run as … Java application”.   (Here is a Java webstart of the same application. But be careful — if you run it under Java 7, which is sometimes difficult to avoid with webstarts, make sure the left hand panel is hidden or it runs v e r y slowly.) This application allows you to experiment with all 17 wallpaper groups — see the “Wallpaper” menu and the left inspection panel.  Here’s a picture generated the group 244 with the automatic painting option (choose “Wallpaper->run” option):


Wallpaper group resource: The following chart  contains a list of all 17 wallpaper groups including the standard fundamental domains and the generators used in the discretegroup WallpaperGroup class.

The 17 wallpaper groups

The 17 wallpaper groups

More group theory. To obtain a good answer for Assignment 4 it’s useful to understand a bit more about the internal structure of the frieze groups.  It turns out the the translation subgroup plans an important role.  To understand this, we need to introduce some notation.

Definition: A subgroup $H$ of a group $G$ is normal if $gHg^{-1} = H \forall g \in G$. We write $H \trianglelefteq G$.

Theorem: The translation subgroup $T$ of a euclidean group $G$ is a normal subgroup.

Proof:  A general  isometry $g$ can be written as $g(\mathbf{X}) = A.\mathbf{x} + T$ where $A \in O(n)$ is an orthogonal transformation and $T \in \mathbb{R}^n$ is the vector of the translation. Then $g^{-1} = A^{-1}.\mathbf{x} + A^{-1}.T$ and writing out the composition $gSg^{-1}$ where $S$ is the translation $\mathbf{x} \rightarrow \mathbf{x} + S$ yields the result $gSg^{-1}(\mathbf{x})= \mathbf{x} + A^{-1}.S$, which is clearly a translation. \qed

Cosets.  A  subgroup $H \trianglelefteq G$ determines an equivalence relation on the group $G$ as follows: Define $\mathbf{x} \sim \mathbf{y} \iff x^{-1}y \in H$.  We leave it to the reader to verify that this is an equivalence relation.  Hence, it partitions $G$ into equivalence classes of elements.  Each equivalence class is called a left coset of $G$ with respect to $H$.  A similar definition involving $xy^{-1}$ yields the right cosets. The coset containing $id$ is clearly $H$ itself. [Exercise: when $H$ is normal, the left cosets and the right cosets coincide.] The coset containing $\mathbf{x} \in G$ is written $[\mathbf{x}]$.  [Exercise: Every element of $[\mathbf{x}]$ can be uniquely written as $\mathbf{x}\mathbf{h}_x$ for some $h_x \in H$.] Let us choose a set of representative ${\mathbf{a}_i}$ for the cosets.  Then $\mathbf{x} \in [\mathbf{a}_i]$ can be written as $\mathbf{x} = \mathbf{a}_i \mathbf{h}_x$ for some $\mathbf{h}_x \in H$.

The quotient group. The cosets of a normal subgroup have an induced group structure. Indeed, let $[\mathbf{x}]$ and $[\mathbf{y}]$ be two cosets.  Then define a product on cosets by $[x][y] = [xy]$. Using our canonical representatives we can write  the RHS as $[(\mathbf{a}_i \mathbf{h}_x) (\mathbf{a}_j \mathbf{h}_y)]$.  Now since right and left cosets are the same, there exists $\mathbf{h}^{‘}_x \in H$ such that $\mathbf{h}_x \mathbf{a}_j =   \mathbf{a}_j \mathbf{h}^{‘}_x$. Then moving parentheses $[\mathbf{a}_i (\mathbf{h}_x \mathbf{a}_j) \mathbf{h}_y] = [\mathbf{a}_i \mathbf{a}_j \mathbf{h}^{‘}_x \mathbf{h}_y] = [ \mathbf{a}_i \mathbf{a}_j]$ so the result is clearly independent of the choice of $\mathbf{x}$ and $\mathbf{y}$.

We write $G/H$ and call it the quotient group of $G$ by $H$.

Connection to Assignment 4. At the conclusion of thursday’s lecture, Mr. Gunn showed how these ideas could be applied to Assignment 4 to generate the desired list of elements of the freize groups. Here’s what the resulting code for updateCopies() looks like:

Matrix[] cosets = null;
Matrix generatingTranslation = null;
int numCosets = 0;
switch(whichGroup)	{
case 0:
	numCosets = 1;
	cosets = new Matrix[1];
	cosets[0] = new Matrix();
	generatingTranslation = MatrixBuilder.euclidean().translate(1, 0, 0).getMatrix();
case 1:
	numCosets = 2;
	cosets = new Matrix[numCosets];
	cosets[0] = new Matrix(); // identity
	cosets[1] = MatrixBuilder.euclidean().reflect(new double[]{1,0,0,0}).getMatrix();
	generatingTranslation = MatrixBuilder.euclidean().translate(2, 0, 0).getMatrix();
	// implement this group (* infinity infinity ) here as above in case 0
	// there are two vertical mirrors a distance 1 apart.
case 3:
	generatingTranslation = MatrixBuilder.euclidean().reflect(new double[]{0,1,0,0}).translate(1,0,0).getMatrix();
	numCosets = 1;
	cosets = new Matrix[1];
	cosets[0] = new Matrix();
case 6:
	// implement this group (* 2 2 infinity) here as above in case 0
	// there are two vertical mirrors a distance 1 apart and a horizontal mirror  in the line y = 0.
	generatingTranslation = MatrixBuilder.euclidean().translate(2,0,0).getMatrix();
	numCosets = 4;
	cosets = new Matrix[4];
	cosets[0] = new Matrix();
	cosets[1] = MatrixBuilder.euclidean().reflect(new double[]{1,0,0,0}).getMatrix();
	cosets[2] = MatrixBuilder.euclidean().reflect(new double[]{0,1,0,0}).getMatrix();
	cosets[3] = MatrixBuilder.euclidean().rotateZ(Math.PI).getMatrix();
        .... // other cases not included here
	int outerLoopCount = count/numCosets, counter = 0;
	// run through the powers of the generating translation ...
	for (int j = 0; j &lt;= outerLoopCount; ++j) {
		Matrix powerOfTranslation = Matrix.power(generatingTranslation, (j - outerLoopCount/2));
		// and multiply it on the right by each of the coset representatives
		for (int k = 0; k&lt;numCosets; ++k)	{ 			// skip over non-existing scene graph components at end 			if (counter &gt;= count) continue;
			SceneGraphComponent child = translationListSGC.getChildComponent(counter++);
			Matrix tmp = new Matrix(cosets[k].getArray().clone());


26-28.11 More Symmetries and Groups, Assignment5

Assignment5: For the class’s Christmas calendar, each group is asked to contribute one beautiful, self-made mathematical image.  Please subclass the java class template.Assignment to produce an application named Assignment5 which displays this image when it is run.  I encourage you to use this assignment as a preparation for your project — even if you don’t know what the topic of your project is!  Choose some favorite  domain of mathematics and use what you’ve learned about jReality to create an image appropriate for inclusion in a Christmas calendar.  For example, the image below shows another of my free-lance efforts for Matheon from several Christmases ago …  Assignment5 due on Dec 13 — see the next paragraph for the continuation of Assignment4, due on Dec. 6. xmasTree-01 Assignment4 continuation. I have, as promised, extended Assignment 4 to include another “assignment”. The problem with the standard painting algorithm is shown in the following image: when the center of the brush approaches the boundary of the fundamental region (always a square for these groups), it can happen that only part of the brush is painted.  See the red and blue “half-paths” which join along a seam: the red was painted with the center of the brush slightly to the left side, the blue with the center of the brush just slightly to the right.  It ain’t right — you gotta fix it.

The problem with painting a freize group.

The problem with painting a freize group.

To complete this assignment:  Please make sure your Assignment4 class subclasses from template.AbstractAssignment4 not from a copy in your student package. Then update to the latest version of my repository. You should only need to make a copy of template.Assignment4PaintTool — see the directions at the top of this file.  The new version of AbstractAssignment4 invokes this class to provide painting support — your task is to edit Assignment4PaintTool so it supports all 7 frieze groups so that no seams are visible during painting.  This assignment is due in a week, on Dec. 6.

Note: Do some of your frieze groups appear wrong (the last three groups on the menu, when there should be two rows there is only one with L’s lying on top of each other)?  If so, make sure that the updateCopies() method in Assignment4 contains the following line of code:

translate(0, (whichGroup &gt;= 4 &amp;&amp; whichGroup &lt;= 6) ? .5 : 0, 0).

It could be that you made a copy of template.Assignment4Example before I included the above line of code.

Mathematical News. This week we continue the exploration of planar (or at least 2-dimensional) symmetry patterns.  The focus turned from frieze groups to spherical groups, that is, groups of isometries of the 2-dimensional sphere $\mathbf{S}^2$.  This is just the familiar orthogonal group $O(3)$, and a point group is a discrete subgroup.  Recall a discrete subgroup is one in which the identity element is isolated, there is no sequence of group elements converging to it.

Fundamental domains and quotient spaces. Before continuing the investigation of particular groups, Mr. Gunn introduced some general language.  First he observed that we are considering symmetries of 2-dimensional spaces of constant curvature, such as the Euclidean plane or the 2-sphere.  In general we call this space $\mathbf{X}$.  And a discrete group of motions will be in general denoted as $\Gamma$.  He then discussed the concept of a fundamental domain for $\Gamma$.  That is a subset $D \subset \mathbf{X}$ such that $\cup_{g\in D}{g(D)} = \mathbf{X}$ and $g_1(D) \cap g_2(d) = \emptyset$ for $g_1, g_2 \in \Gamma$. That is, the copies of $D$ cover $X$ without overlap.  Such a covering is called a tessellation – in German, Pflasterung.  We can arrive at the same concept more abstractly by defining an equivalence relationship on $\mathbf{X}$: \[ \mathbf{P} \sim \mathbf{Q} \iff \exists g \in \Gamma ~\text{such that}~ g(\mathbf{P}) = \mathbf{Q} \] The set of equivalence classes is called the quotient of $\mathbf{X}$ by $\Gamma$ and is written $\mathbf{X}/\Gamma$.  We want to understand better how such quotient spaces behave.

Simplest example: the circle as quotient of the line. Mr. Gunn explained in detail the construction of the quotient space $\mathbf{E}^1/ \{ t \}$ where $ \{ t \}$ is the discrete group generated by the unit translation $t: x \rightarrow x+1$.  He showed that $\mathbf{E}^1/ \{ t \}$ is a circle $S^1$ by twisting the line into an infinite helix so that the orbit of any point under the group lies on the vertical line passing through it.  Then, by looking down on this helix from far away, each vertical line collapses to a point and we are left with a circle.

Connection of quotient space and fundamental region. The quotient space is closely related to a fundamental domain.  A fundamental domain for this group is the half-open interval $[0, 1)$; the quotient space is obtained by taking into account the fact that $0 \sim 1$, hence we have to “glue” the two ends of the segment together to obtain the quotient space.  In short, the quotient space can be obtained from a fundamental region by remembering to glue together parts of the boundary of the FD which are identified under some group element.

Dirichlet domain.  There are many possible choices for a fundamental domain. For the groups we consider, we can always arrange that the fundamental domain is topologically an open disk along with a subset of its boundary.

The problem with overlaps. An n-dimensional euclidean manifold is a space in which every point has a neighborhood homeomorphic to $\mathbf{R}^n$. When is the quotient space a manifold?  Define the stabilizer of a point P to be the set of group elements which fix P: $s(P) := \{g \in \Gamma \mid g(P) = P\}$.  Since $\Gamma$ is discrete, $s(P)$ is finite. It is exactly  points with non-trivial stabilizers that cause overlaps in the tessellation. It’s easy to see that copies of any fundamental region will “overlap” at such points.  For let $D$ be a fundamental domain$g, h \in s(P), P \in D$.  Then $f(D) \cap g(D) = f(P) \neq \emptyset$. On the other hand, if $s(P) = \{id\}$ for all $P\in D$, then the action is called fixed-point free and the resulting quotient is a  manifold. This is equivalent to saying we can find a fundamental region whose copies cover $\mathbf{X}$ without overlap.  This is the case for example for the translation frieze group $\infty \infty$ or the group generated by one glide reflection $\infty X$.

Orbifolds to the rescue.   If $s(P)$ is not the trivial group, the quotient space $\mathbf{X}/\Gamma$ in a neighborhood of $P$ will not look like $\mathbb{R}^n$ but rather like the quotient $\mathbb{R}^n/s(P)$.   An orbifold is defined similarly to a manifold, with the looser requirement that each point $P$ has a neighborhood homeomorphic to $\mathbb{R}^n/G$ for a finite group $G$.  In effect, we “split” the point into $k$ identical “fractional” parts  (where $k = | s(P) | $) so that the $k$ “overlapping” copies of $P$ (each of size “$\dfrac1k$”) together “add up” to a single point.  In this way we can rescue the statement “The copies of D cover $\mathbf{X}$ without overlap.”

Example. Consider a rotation of order-2 in the plane and the associated cyclic group $C_2$.  The rotation center $P$ is fixed by the both the identity and the rotation, so is not trivial. In a neighborhood of $P$, $\mathbf{E}^2/C_2$ looks like a cone formed by rolling a straight angle at $P$.  [need to show a picture to explain this].

Why this is important. This relation between symmetry groups and quotient spaces is important since it turns out that every topological space can be realized in this way as the quotient of some simply-connected space by an appropriate discrete group. More on this on Thursday when I’ll show the video “Shape of Space”.  This wasn’t completely proven until the Poincare Conjecture was proved by Grigori Perelman in 2006.

The spherical groups fixing two points. We began by restricting attention to symmetry groups which fix two antipodal points.  We began by showing that there are a family of cyclic groups generated by a rotation of order $n$, fixing the north and south pole and rotating along the equator, so to speak.  One sees easily that fundamental domain for this group is a two-sided section of the sphere extending from north to south pole, whose one side is mapped to the other side by the rotation.  This region is called a bigon since it has two sides and two vertices.  Since the angle at each vertex is $\dfrac{2 \pi}{n}$, the group is called $nn$.  … to be continued … In the meantime see this Wikipedia article.

19-21.11 Symmetries and Groups, Assignment4

Current news and notes:

  • Our lectures will be held in MA 313 from now on.  This decision was met by the BMS administration since our class size exceeds the recommended seating for the room. I hope we can reproduce the U-shaped seating from 212 in 313 — with your help I think we shouldn’t have any problem adjusting the new roomier quarters.
  • Check out this attractive web-site featuring mathematical visualization and education.  It was recently awarded a gold prize in a European competition for internet and mobile apps.  I found quite a few things to like, particularly the interactive Mandelbrot zoomer.
  • Assignment4 is ready for download — although I may add something else over the weekend, the first part is ready to work on. The assignment will be due Friday 29.11 at midnite.

Symmetry and groups.  Mr. Gunn introduced the concepts of symmetry, focusing on patterns in the euclidean plane. The set of symmetries of a pattern he showed to form an algebraic structure known as a group. He introduced three categories of symmetry groups in the euclidean plane based on the translational subgroup of the group. … to be continued… Here are some good lecture notes on euclidean symmetries from last year’s course.  Here is an introduction to the Conway notation for groups.

Here is a basic treatment  by Prof. Sullivan of transformation group theory.

12-14.11 Geometry factories, Assignment3, …

Ames Room update. At the beginning of the lecture Mr. Dr. Gunn returned to exercises he gave in class last week.  He showed that the projective matrix for the simplified 2D Ames room looks like: \[ \left( \begin{array}{ccc} 1 & 0 & 0 \\ 0 & 1 &0 \\ \dfrac{1}{n} & 0 & 1 \end{array} \right)\] where $n$ is the distance in meters to the right of the eye point, which is the image of the ideal point in the x-direction.  As a result, Dr. Gunn asserted (shamelessly without proof) that any projectivity can be decomposed as the product of an affine matrix and an “Ames” projectivity — the latter being defined as a matrix, like the one above,  which is the identity matrix except in the last row.

Geometry Factories This week we turned to discussing how geometry is represented in jReality. The basic classes PointSet, IndexedLineSet, and IndexedFaceSet were introduced.  However, using these classes directly is awkward and time-consuming.  Instead, there is a set of geometry factories which do the heavy lifting and allow the user to specify the geometry in a more mathematical way.  We concentrate on the factory ParametricSurfaceFactory. This allows the user to specify an immersion of a rectangular domain in $\mathbb{R}^2$ into $\mathbb{R}^3$ or $\mathbf{P}^3$ (depending on whether one uses standard or homogeneous coordinates).

Assignment3 This assignment is designed to provide some practice in using geometry factories.  In contrast to Assignment2, where you were asked to create a scene using very simple geometry and many transformations, in this assignment you are forbidden (Verboten!) to use matrices to “create” geometry, you have to use … geometry!  Check out the latest version from the teacher git repository (the Tuesday tutorial participants have already made this step.)  However, note that even if you were at the Tuesday tutorial, you should still update again since I’ve cleaned up the assignment and focused it more on the actual task at hand — I’ve removed the torus for example and have used the time parameter to rotate the square around — which is forbidden but it’s useful to see how a simple example works.

Update to Assignment3 [15.11].  I’ve updated Assignment3Example based on an example worked out in yesterday’s tutorial, which in turn was suggested in the classroom discussion yesterday.  The result is that the example now rolls up the square into a cylinder: Assignment3-13-01

How it’s done: The first step is to set two fields in the setValueAtTime() method: the time and the radius of the cylinder r.  The radius depends on the time in such a way that it interpolates between $\infty$ and $\dfrac{1}{\pi}$ as $t$ varies between 0 and 1:

public void setValueAtTime(double d) {
        time = d;
	r = (time == 0) ? -1 : 1/(Math.PI*time);

Then when the factory is updated, the evaluate() method uses these fields to construct a section of a vertical cylinder with radius $r=\dfrac{1}{\pi}$. The time $t=0$ is handled separately to produce the beginning square. The displayed section of this cylinder is subject to two constraints:

  1. It subtends a horizontal arc length of 2 (to be consistent with the fact that the beginning square has side length 2), and
  2. The vertical mid-line of the square remains fixed in space throughout the animation.

Condition 1) implies that the section of the cylinder subtends an angle of $t\pi$ so that it has arc length 2 as desired.  Furthermore we choose the $(u,v)$ domain so that it goes from $(-1,-1)$ to $(1,1)$  and the values of $u=0$ corresponding to the vertical mid-line of the square are fixed: the square rolls up while keeping this line fixed.  In order for this line to be fixed, we calculate that the axis of the cylinder has to have $xyz$ coordinates $(0, y, r)$.  Taken together, this produces the following code for $evaluate()$:

public void evaluate(double u, double v, double[] xyz, int index) {
	double angle = time * u * Math.PI;
	xyz[0] = time == 0 ? u : r * Math.sin(angle);
	xyz[1] =  v;
	xyz[2] = time == 0 ? 0 : -r * Math.cos(angle) + r;
	xyz[3] = 1.0;

To satisfy the assignment, this animation would need to be continued so that at the end $t=1$ the cylinder has unrolled again so that the opposite side faces out.

3D Video Transitions: Practical applications of Assignment3. Due to some very important work I’m doing this week for Matheon, I’m not able to write such detailed blog posts as usual.  This movie is a “cross-eyed stereo” movie meaning if you can cross your eyes just the right amount as you watch it, the images should fuse together to produce 3D depth.  If you do view this movie, you’ll see that it consists of 3D transitions between still photos — the kind of transition I mentioned in class when I introduced Assignment3! So everything hangs together.  In any case, everything you need to know to do Assignment 3 should be contained in the Java classes from the git repository.  If not let me know. The assignment is due on Friday November 22, which is, if I’m not mistaken, the 50th anniversary of the assassination of John F. Kennedy, an event which I experienced as a 6th grader.

Assignment2 Update [11.11.2013] I’ve added some points to the discussion of Assignment2, to include how to get the inspector properly configured, and how to store and restore properties.  Please take a look at these additions and extend your own code if you need to.

  •  I’m continuing to enjoy looking at the results of Assignment2.  The assignments I’ve looked at look good. I’ve particularly enjoyed the ones with which have implemented the torus setup.  Following picture shows a frame from the animation based on a torus.  It reminds me of “op art”. They are recognizably cubes, but each looks like it was  drawn using a different perspective.Assg2-torus-01
  • I’ve added a bit more functionality to Assignment2, so you can play around with the tool in the leaf child, that I demo-ed last Thursday 07.11.13 in class. (Exercise: why is 07.11.13 a special day. Hint: it has to do with prime numbers.).  It’s designed so that if you update your repository to my gitorious repository (the one we named “teacher”) your code should continue to function unchanged, but the inspector now contains a button which allows you to activate a translate tool in the leaf component.  If however you construct your own inspector w/o using a call to super.getInspector(), this button won’t appear for you.

05-07.11 jReality scene graph, Assignment2, …

Projects: It’s still early in the process for choosing a project.  You may be interested in these guidelines from last year.

Teamwork:  You are expected to work in teams.  It’s more fun and the results are of higher quality (IMHO). We can discuss any technical problems with team building today.

05.11 Lecture: Dr. Gunn took the opportunity to present an introduction to the jReality scene graph.   Look also here for a more sober introduction to the same topic. As Assignment2 (below) is easy, you are encouraged to spend some time in the next week familiarizing yourself with the jReality developer tutorial, particularly the sections devoted to transformations, geometry, and appearances. You can do this using your browser and webstart, but if you want to play with the code for particular examples (strongly recommended), these reside in the jReality project under the src-tutorial folder.

07.11 Lecture: We looked in more detail at the SceneGraphComponent javadoc. We also looked at the base class SceneGraphNode and its subclasses. Then, departing from his original plan to discuss the  Appearance class,  Dr. Gunn turned the discussion to the tool system, and showed how to add a tool to the leaf child of Assignment2 in such a way that the resulting transformation was applied before the animation transformation (coming from setValueAtTime()), with interesting results. This discussion also hopefully established the importance of the SceneGraphPath class in determining the exact position of a node in the scene graph.

Assignment1 is completed and the results are, from my point of view, very satisfactory.  To begin with, most of the technical difficulties have been overcome and I have “harvested” git repositories for the majority of the students who have signed up for the class.  And secondly, the quality and variety of the turned-in assignments is impressive.  I only wish it were easier to collect all the different assignments into a “composite” application to be shared and enjoyed by all.  If anyone has any ideas how this can be technically achieved please get in touch with me.  Otherwise I will continue to show a few samples during the tutorial sessions as time permits.

Assignment2 is already there, due this Friday at midnight. It’s basically Assignment1 the way it should have been.  Includes storing and saving properties,  on-line documentation file, and a more modular structure.  Just take what you did for Assignment1 and convert it to the improved format.  Of course if you want to improve it (for example with the extra credit idea), please do so.  In particular, here are the directions:

  • Follow the directions here to update the course repository.  You should find a new package template.assignment2.  To prepare your own version of assignment2, do the following, assuming your package name is student007:
    • Create a package student007.assignment and copy into it the files assignment2.xml, assg2-anim.xml, Assignment2.html, and assg2-01.png.
    • In this package create a new Java class named Assignment2.  It should inherit from the class template.assignment2.Assignment2.
    • Edit the newly created class.  You should see stubs for the following methods, which are declared abstract in the superclass:
      • protected Matrix getSetupMatrix(int i, int j)
      • protected Matrix setArrayValueAtTime(double time, int i, int j)
      • protected String getPropertiesFile()
      • protected String getDocumentationFile()
    • If you look into template.Assignment2 or template.Assignment you can see how these methods should be used.
    • Copy code from your original Assignment1 into these method stubs to create a running application that does the same thing your original assignment1 did.  getPropertiesFile() should return “src/student007/assignment2/assignment2.xml” and getDocumentationFile() should return “Assignment2.html”.
    • If you’ve added a slider to the inspector (which was part of the assignment), you’ll also need to override the getInspector() method.  To add your GUI elements, you can call super.getInspector(), cast the return value to an instance of Box, and add your GUI elements to this box.  Or don’t call super.getInspector(), and construct the complete inspector in your method.
    • On a related note, if you’ve added parameters which you want to store and restore as properties, you’ll need to overwrite storeState() and restoreState() (look into the parent class to see how this is done).
    • Run the program.
      • Verify that the on-line documentation works by typing the ‘h’ key — your browser should open a window and display the provided html file.  Edit it to reflect what your group did. You can use a normal text editor to do this if you don’t have access to an html editor — just ignore all the html formatting and replace the text sections with text that describes your application.
      • Also verify that the properties file and animation file are working by changing some parameters and saving them (save the property file by choosing File->Quit, save the animation file by choosing “File->Save As…” and saving it in student007/assignment2/assg2-anim.xml.)
    • Notice that the parameters in the left inspection panel are now saved in the properties file.  If you have other parameters or have removed some of these, please overwrite the methods storeStates() and restoreStates() (see template.assignment2.Assignment2 for details).
    • Note that the inspector panel of the Assignment2 superclass contains the 5 parameters provided by the template assignment.  If you still use these but have added more of your own, you can implement the method getInspector(), and add your new GUI elements to the component which super.getInspector() returns.  (You may have to cast this to class Box to be able to add components to it.)
  • Extra credit assignment. There is now a method Pn.projectivity(double[] dst, double[][] from, double[][] to) which provides the projective matrix mapping the $n+2$ points from onto the $n+2$ points to.  Of course to get it you’ll need to update your jreality repository which we’ll do in the tutorial this week, or see the post describing the steps.

Show working version of movie on conformal maps.

28-30.10 More fun with projectivities

It’s Halloween!  And so we spent the lecture exploring some strange and eerie applications of projective transformations.  Here are the rough notes Dr. Gunn used to prepare the lecture.

  • Semester Projects.
    • Possible themes.  Balancing mathematical content with practical implementation (“theory and practice”).  Rough suggested time-table.
  • Lecture write-up from 28.10.2013.  Are there volunteers to write up the lecture from Tuesday?  Recall: we went through all the gory details required to construct a projectivity (as 3×3 matrix) which maps the unit square onto a trapezoid.  Either directly enter into blog (which supports LaTeX formatting directly) or prepare a pdf file for inclusion.
  • State of gitorious.  This week we have the modest goal of being able to “push” student projects back onto your gitorious accounts, and from there notify me (by e-mail or “merge request” from gitorious) that there is something to look at.  Next week we’ll conclude the gitorious work by showing how to update to receive new assignments from me, and how to update jReality.  See this blog post for details.
  • The Internship trailer.
  • Applications of projective transformations:  the Ames room.
  • Noneuclidean geometry via projective geometry.
    • TriangleGroup demo
    • Klein’s Erlangen program: preserved properties determine subgroup of PGL(n+1).
    • The subgroups SO(3) and SO(2,1) lead to spherical/elliptic and hyperbolic geometry, resp.
    • Distance via inner product, cos and cosh. Examples.