Mathematical Visualization SS07 Technical University Berlin
Theme: Wallpaper Groups
Due: May 30, 2007.
Part 1. Mathematics
No exercises this week, but here are some useful references related to wallpaper groups:
- This wikipedia article is a good place to start.
- There are lots of beautiful books related to 2D symmetry patterns:
Part 2. Programming
First, update with the latest version of cvs. See here, if you've forgotten.
In order to improve access to the existing jReality javaDoc, do the following:
- In the Package Explorer, select the entry discreteGroup.jar. This jar contains the classes featured in this week's assignment.
- Using the right-mouse context menu, select "Properties..."
- In the resulting window, select "JavaDoc Location"
- In the text field labeled "JavaDoc Location Path:", enter "http://www.math.tu-berlin.de/~gunn/Documents/javaDoc/discreteGroup/" and click Apply, OK.
- Now in the Java editor, when you select classes in the core jReality distribution, for example, SceneGraphComponent, you should see JavaDoc information. Also, if you select a method or put your cursor within the parentheses of a method call, you should also get javaDoc information related to the method (resp., its parameters). Finally, you should be able now to select a class or method and select the menu item "Navigate->Open External JavaDoc..."; the javaDoc should open in a separate browser window.
- Do the same for the entry charlesgunn.jar. Its path is: "http://www.math.tu-berlin.de/~gunn/Documents/javaDoc/charlesgunn/"
I have added a new class to the CVS repository, Assignment05. This is a new application featuring the 17 Euclidean wallpaper groups.
- Download it in the Eclipse Package Explore by selecting "Team... -> Synchronize with repository ..." etc.
- Run it. Notice that the application has two new menus "Group" and "Actions". The following instructions show how to use these menus and more:
- Choosing different groups
- You should see an array of yellow "L" shapes. In the center you should see a white outline of a square. This represents the group "O", generated by two independent translations.
- From the "Group" menu choose "4*2". After a delay, you should see more "L"'s but these are arranged with a different symmetry group, that of "4*2", and the white outline should be different, showing a right triangle and a small square at the right angle, representing the order-4 rotation; the line along the hypoteneuse represents the reflection of the group.
- In the toolbar, select the left-most icon (the select tool)
- Click on any of the "L" shapes in the graphics window. You should see a dotted white box appear, indicating that you've selected the object. In the bean-shell window below the graphics window you should see the name of this object.
- Without moving the mouse, click two more times, until a solid white outline appears. This indicates the selected component can be rotated.
- Select the rotate tool (second from left on the toolbar). With the mouse over the graphics window, press the middle mouse button while dragging the mouse. The "L" should begin to rotate in the plane of the screen, and all the other L's should rotate along with it.
- Release the mouse while the mouse is still moving; the L's should continue to rotate.
- Press down on the right mouse button; you should get a small window. Click the box labeled "Allow multiple motions".
- Loading geometry files in OFF format.
- Choose "Group->O" to return to the original translation group.
- Select the menu item "Actions->Load OFF file...". In the dialog that appears, select the file "square.off", and click OK.
- You should see a blue square (actually many copies of this square). This square can be selected and rotated just as the "L" shape was.
- While the shapes are rotating, you can also change the group via the "Group" menu.
- Choose "Group->236"; select "Actions->Open OFF File..."; select the file "gunn-236-01.vect". ["vect" files describe line sets, not faces.]
- You should see a pattern of white lines. Notice that the square has been replaced by these lines.
- Select "Actions->Show generators" and "Actions->Show L" to hide the other geometry.
- You can adjust the appearance of the tessellation using keyboard shortcuts
- 'shift-t': toggle display of tubes
- 'c': change the color of the lines/tubes
- 'shift-c': change the color of the background
- 'shift-w'/'w': decrease/increase the width/radius of the lines
- Animating the tessellation
- Click on the tab "animate" in the inspector window.
- Drag the slider labeled "t" and notice how the "L" rotates around.
- Software engineering comments:
- Assignment05 implements the interface
This interface provides several new features in the 3D viewer:
- The application has a tool bar, which allows you to choose among several tools. The 'h' key displays the instructions for using the currently selected tool. [NOTE: not all tools are relevant to this application. In particular, rotating objects in space is not necessarily what you want to do with a tessellation of the plane. Hence I recommend above using the middle mouse button, which rotates around the z-axis.]
- The application features a keyboard listener with a wide variety of keyboard shortcuts for controlling the viewer; to see which commands are available via the keyboard listener type 'h'.
- You can read about this interface by selecting its name in the Java editor of eclipse and using the "Navigate->Open External JavaDoc..." menu item. You should be able to carry out the assignment without knowing very much about this interface, however. Just be aware that, compared to the previous assignments, it provides the above extra functions and an alternative way of getting inspection panels into the ViewerApp. This is all done by the helper class ViewerAppLoader which appears in the main() method of Assignment05.
- The javaDoc for the classes in the package
discreteGroup is quite limited. For this assignment you should be able to simply modify the code given in Assignment05 without having to understand much about how the classes in this package are working. [I am working on the documentation.] Of course if you have questions here I am glad to try to answer them.
- Your assignment is to extend Assignment05 according to the following rules:
- Choose three of the groups and design "tiles" for each group in the form of OFF files describing polygons and curves (as in the examples described above).
- You can choose your three patterns as "imitations" of patterns on the handouts John Sullivan distributed in class. Each of the three patterns should belong to a different group.
- The documentation for the OFF format files will be handed out at the Uebung or you can pick up a copy from me.
- There are other example files to play around with included in the same directory where square.off and gunn-236-01.vect are contained. The file name contains the name of the group. (Note: since '*' is not allowed in file names, use 'S' instead. For example, the file gunn-3S3-2.vect belongs to the group '3*3').
- You should name your files similarly and put them into the resources subdirectory of the CVS distribution. Assignment05 looks in this directory by default when asked to open an OFF file.
- Look at the file gunn-244.vect to see how to include transformations into your OFF file.
- Look at the file gunn-3S3-2.vect to wee how to include lists of unrelated geometry in your OFF file.
- The file gunn-4S2.vect contains a mini-documentation of the VECT format if you don't quite understand the official documentation.
- IMPORTANT: You will need to use the handout sheet labeled "Wallpaper Groups Fundamental Domains". This contains all the necessary coordinates of the fundamental region of the groups as they have been parametrized in this application. I recommend using a piece of graph paper [millimeterpapier] to design your tiles. First sketch the fundamental domain using the handout, then work out where you want to put your geometry with respect to it.
- There are lots of beautiful books containing samples of wallpaper symmetries. I have a book in my office you're welcome to look at: Handbook of Regular Patterns, by Peter Stevens.
- Samples of student work from a similar project 3 years ago can be seen here.
- In addition to the three static geometries above, you should also generate an animated tessellation.
- Make a copy of Assignment05.java in your own sub-package.
- Begin by choosing one of the groups. Edit Assignment05.java so that this group is loaded by the program when it starts up, instead of the translation-only group "O".
- Design an animation which involves one or a few simple polygons or curves. This animation should be implemented using one of the geometry factories (IndexedFaceSetFactory or IndexedLineSetFactory).
- Refer to this tutorial for an introduction to the geometry factories.
- Initialize the factory so that at startup it creates the beginning frame of your animation.
- Redefine the method
animate(double t) in Assignment05 to carry out your animation. Each call to animate() should redefine the coordinates (and possibly the colors) of your geometry. Then call the factory's update() method. I recommend keeping the combinatorics of your geometry the same throughout the animation.
- Within the animate() method, you can also animate the Appearance's of your scene graph to modify the global colors, line width, etc.
- Check in your version of Assignment05.java to cvs before 30 Mai, 14 Uhr.
- This assignment is due on 30 Mai, 2007. Please email me if you have any questions or difficulties: there may be mistakes.
- I would like to arrange meetings with each of you individually to discuss your semester projects. Please begin to seriously think about what you want to do for your project so that when we meet you have some ideas to share with me. If you don't have any clear ideas, think about adapting Assignment05 in some way -- particularly how it might be brought into the PORTAL virtual reality theater.