CS526

Matt Handley: applmak_@_gmail_dot_com

This page is all about my excursions in CS526. It serves as documentation of my progress through the class, as well as an archive for those who might want to look at it as well.

Final Project: Sound Visualization

Download code here
Download binary here

A program that display data we collected in the EVL.

The Data

We spent last Tuesday collecting data for our project. It took about two hours. Three of us used the instruments to measure sound levels, I took data, and another taped the floor up with coordinates.

The Program

The program is designed to display the sound data we collected. The user can view the sound as glyphs, or as a 3D texture. Fine tuned control over clipping planes, glyph, and color are provided. Multiple data sets can be loaded at one time, to compare and contrast between them.

Screenshots

Project 3: Dynamic Network Visualization

Download here

It's extremely difficult to extract meaningful information about community from dynamic (temporal) graphs. This program attempts to help a user see the communities inherent in the data by applying a novel visualization algorithm.

The Data

Dynamic network data is stored as a text file of three columns. The first is a timestamp, the next an identifier for an individual, and finally the identifier of the person the first individual interacted with. As an example, I have included portions of the Enron email data set, available here.

The Algorithm
  1. For each node, initialize its position to some random point
  2. Begin at timestep t0 (the first timestep in the file)
  3. For Rs ticks, allow the edge mentioned in the current timestep to pull together its nodes (following a spring-based force, where k is fixed)
  4. Move every node away from the combined center of mass of all the nodes
  5. Increment the timestep to the next timestep in the file, wrapping back to the beginning once the end is reached
The Results

400 emails, about 100 people, after many iterations.

Same dataset, different parameters.

4000 emails, about 1000 people, after many iterations.

20000 emails, about 10000 people, after many iterations.

How to use the program

My Cocoa knowledge continues to improve, but this is certainly not my best interface. First off, ignore the menubar. Use the utility panel that shows up when the program opens. Type the path to a data set into the data set field. Hit return and the data will load. Change the parameters in the fields as you like. If, as sometimes happened on my build, the fields do not have intelligible numbers in them, here's a list of basic defaults and explanations for each parameter.

FieldDefaultExplanation
Initialization Region {{-.25,-.25} {1.5,1.5}} Region where nodes are initially added at random.
Spring Constant 2.0 The k in the spring equation F = -kx. A higher k is a stiffer (stronger) spring.
Repel Frame Skip 20 How many frames should be skipped between repel steps.
Repel Force .00004 The force with which the nodes are pushed away from the center of mass of the group.
Model Frame Skip 2 How many frames should the springs be allowed to pull before the next time step of data is loaded.
Animation Rate .0003 How long to wait until the next frame should be drawn. This will not overdrive your graphics card; it's simply an extra bit of time to wait between the maximum speed.
Drawing Bounds {{-.5,-.5} {2,2}} The drawing boundaries of the view (uses glOrtho).
Point Size 4 The integer size of the points (uses glPointSize).
Point Color [NSColor blueColor] The color of the points.
Line Color [NSColor blueColor] The color of the edges.

To make the animation go, in the Animation tab, click play. At any time, feel free to click a point to see who that is (a text box in the upper-right will show the email address of the person).

Still to do

Project 2: Volumetric Rendering

Download here

When the program boots, it will attempt to load /Users/handley/Desktop/Pig.vtk. It probably doesn't exist, but I think the program will function anyway. Just go to the File menu, and open another vtk file.

Note, this is not the same as a raw file. To turn a raw file into a vtk file, do the following from a terminal:

			% cat > vtkheader
			# vtk DataFile Version 3.0
			<description here>
			BINARY
			DATASET STRUCTURED_POINTS
			DIMENSIONS <width> <height> <depth>
			ORIGIN 0 0 0
			SPACING <spacing_x> <spacing_y> <spacing_z>
			POINT_DATA <width*height*depth>
			  SCALARS image_data unsigned_short 1
			LOOKUP_TABLE default
			
Fill in the parts surrounded by angle-brackets with the appropriate data for a given raw file. Then, simply run cat vtkheader data.raw > data.vtk and you're done!

For your convenience, here's the headers I used for the Pig, the Knee, and the high-res Xmas tree: Pig.header Knee.header XMasTree.header

Feature List

Screenshots:

- A 260 MB dataset, rendered at near real-time!

- The pig.

- An isosurface.

- A pig on fire.

- Advanced opacity control.

- Advanced color transfer function control.


Project 1: Tornados

This project required me to construct an application that allowed a user to visualize tornado data in Illinois. I had a lot of fun doing, it but certainly didn't have enough time to complete it to my original design. The source code is available here, and a Mac OS X PPC binary is available here. What follows is a discussion of the various features in the program, including screenshots, as well as a few interesting things I discovered about tornados in Illinois.

Features

Cool things to notice