Group: William McDonald, Sunghun Kim, Matt Parker
Further documentation:
Sunghun with videos / images
Matt on construction / mechanics
For our group project, we wanted to develop a physical system to represent graphical depth data. We decided to use a collection of sine and noise waves to start off with - as using depth data really only makes (practical) sense with a 3D grid.
Using Processing, a straight-forward GUI was created featuring four buttons, with a graphical representation of the waves being dynamically created to the right of the buttons. The fourth button allows the user to paint his/her own wave (or any shape, for that matter) and the software will generate a visualization and physical output for the image painted.
Fig 1.1: Drawing canvas allows user to draw images to physically visualize
Fig. 1.2: Visualization of user input wave drawing
To sample each wave - an algorithm was written which samples across the width of a given image proportional to the resolution of the physical system - in our case, 20 samples. At each sample - the program checks to see how far down (Y) the image it takes in pixels before a color other than white is found. Upon finding a color, the value of that sample is received by the simple equation of :
sample_value = y_coord / (image_height / max_value)
Fig 1.3: Graphical representation of sampling method on wave images
In regard to feeding this data into the servo motor array - we decided to use four arduino microprocessors connected via USB to the computer running the software application; with each arduino effectively controlling five servos:
Fig 1.4: Computer / Arduino / Servo array configuration
Monday, December 10, 2007
Saturday, December 8, 2007
Shiver - Final
Fig 1.1: Splash screen for Shiver
The last week of work on Shiver has primarily been a focus on adding features on the GUI side and tying up some loose ends. The largest new feature is the ability to 'simulate' - which allows a user to simulate a full rotation (or however many wanted) of the globe, outputting the frames as an image sequence. This process allows the user to see the rotation as a movie clip running at full speed. The video in this blog entry is derived from that process.
Fig 1.2: Simulate options window
Shiver is still very much a work in progress - however, I am pleased with the result of my work over the past 6-7 weeks, particularly with knowing that I was able to achieve high-quality imagery in real-time using Python and OpenGL together.
shiver_simulation.mov - 10.6mb
Images from Shiver:
Tuesday, December 4, 2007
Shiver Development: Event Density + Time Charting
For the past few days, I decided to develop a type of visualization which attempts to better communicate the areas that have a high density of earthquakes over time. I decided to do this by having the program create a texture on the fly which is fed into the primary globe fragment shader, where areas of high seismic event activity would get higher amounts of red. Since the texture being created is simply a collection red blobs on a black background, it is simple process to add the red areas on top of the globe through the shader. Additionally, the seismic events themselves are visualized through simple lines aligned to the normals of the sphere - with the length of the line determined by its Richter scale value.
Fig 1.1: Globe with event density visualization
After wrapping up event density mapping, I wanted to start trying to visualize events as they occurred over time. The visualization itself doesn't communicate time as much as it displays the erratic nature of seismic activity happening around the world over an extended period (currently, over seven days). To create lines that seemingly wrap themselves around the curvature of the globe - I decided to write a small bezier curve generator which had end points at the 3D coordinates of selected events. The distance of those events is calculated using the Euclidean distance formula of:
Where the distance value is used to apply weight (w) to midpoints in rational bezier curves, such that:
Fig 1.2: Bezier curves mapped across globe based on time of occurrence
Fig 1.1: Globe with event density visualization
After wrapping up event density mapping, I wanted to start trying to visualize events as they occurred over time. The visualization itself doesn't communicate time as much as it displays the erratic nature of seismic activity happening around the world over an extended period (currently, over seven days). To create lines that seemingly wrap themselves around the curvature of the globe - I decided to write a small bezier curve generator which had end points at the 3D coordinates of selected events. The distance of those events is calculated using the Euclidean distance formula of:
Where the distance value is used to apply weight (w) to midpoints in rational bezier curves, such that:
Fig 1.2: Bezier curves mapped across globe based on time of occurrence
Subscribe to:
Posts (Atom)