This page is aimed at anybody who might want to offer me a job in programming. It contains a small number of programs I have written at various times that are relatively complete and should execute normally on most PCs or Macs.

In addition, I have two CVs, both stored here as PDF documents. Firstly, my programming CV which focuses on my experience in writing software. Secondly, my academic CV which details my research experience and publications.


Ray tracer


This is very much a work in progress; my eventual goal is to be able to experiment with some of the more advanced global illumination techniques such as monte carlo path tracing, and render externally-generated mesh objects. However, for now it just uses the classic recursive algorithm on pure mathematical primitives.

Current features are rather limited: only 3 primitives (sphere, plane and infinite y-axis cylinder), a single white light source, shadows, variable specular reflection, object transformations and CSG. The last two offer a good deal of flexibility, however, and I wanted to get the object hierarchy right before adding primitives and textures and so on that might have to be extensively revised later on. I'm currently working on bounding volumes, because hierarchical CSG objects with many transformations are extremely slow to render!

Please click here to see a slightly more detailed history of the project so far, including some images illustrating the features as I added them.

Source code available here: b-ray.zip.
I must apologise for the momentary absence of an executable... at the moment it changes on a daily basis, and I don't want to post anything until it's a little more complete.


C/C++/OpenGL demos


It should be noted that these three C++ programs are not very well coded; they represent early exploits and I was focusing more on learning OpenGL than C++. This will be rectified when I find time.

Chucker
This is a simple ball-throwing coconut-shy-type diversion that I'm currently developing to teach myself the basics of OpenGL and improve my C skills. Perhaps unsurprisingly, I've ended up spending more time on collisions and data structures than the actual graphics...

Move the mouse pointer in the screen to move the aiming arrow; click once to fire a ball. Try to knock the other balls off the boxes. If a ball comes to rest on the floor, it is removed from the game. Once all the balls have vanished, the next level appears. NB very occasionally, a ball escapes from the room (I'm not sure how this happens yet). In this case, the level will not advance and the game will need to be restarted.

Download throw.zip. This archive contains the Throw.exe for Windows, and two texture image files. Make sure the image files are in the same location as the .exe!
Download source .cpp file.
Download vectors.h header. This is a simple vector maths class that is needed by the main program.
This is a work in progress, and will be updated in time!

Rippletank

A simple 3D ripple simulator.
Download ripples.exe.
Download source .cpp file.
Rotating knot

A simple rotating trefoil knot demo.
Download knot.exe.
Download source .cpp file.
This program also needs the vectors.h header file supplied above with the ball-chucker program.

You may also need to install the following DLLs, depending on what is pre-installed on your system. Try running the programs first and see what errors they give.
glut32.dll
msvcp80.dll
msvcr80.dll


ODIN
Ternary alloy diffusion model (PhD project)


This program was the main fruit of my PhD project; it is a Java application designed to predict the distribution of alloy elements within high-temperature components after oxidation.

To (briefly) explain: in high temperature applications such as turbine engines, that can reach temperatures of 800C and over (sometimes peaking at 1600C), material considerations often mean that oxidation of components cannot be avoided. Alloys are therefore designed to oxidise selectively, in a controlled manner, to ensure a maximum possible lifetime without catastrophic failure. During selective oxidation, a single element (commonly Al, Cr or Si) will be oxidised externally, diffusing out of the material to form a corrosion layer on the surface. The diffusion and redistribution of the alloy elements are dependent on thermodynamic interactions and component geometry. This program attempts to model such processes as a function of geometry, using numerical methods to solve Fick's laws of diffusion.

The application's function is extremely specialised so will probably not be of interest to most people reading this; however, it is the largest single program I have written and may therefore be of interest to prospective employers.

The program can be downloaded as an executable: Odin.jar
(This should run on any VM, but has only been tested on Sun's JRE and MacOSX).

The source code may be downloaded as a zip file: Odin.zip
Also included is a readme text file explaining the basic layout of the program and the manual for the main inputs and outputs.

For the truly interested, the model has been published in the journal Modelling and Simulation in Materials Science and Engineering. The full reference is:
W.M.Pragnell and H.E.Evans, Modelling and Simulation in Materials Science and Engineering 14, 733-740 (2006)


Seashells


This is a self-contained java application to build three-dimensional seashell geometries as triangle meshes. It uses the Java3D API (which, if not included in your system by default, can be downloaded here) to render the shapes in wireframe, or either flat or smooth shaded solid surfaces lit with a simple point light source.

Shells are generated by specifying a cross-section polygon which is swept in a spiral pattern according to three bezier functions which define the variation of scale factor, sweep radius and vertical displacement of the cross-section.

Parameters can be saved or loaded to/from data files, the graphics windows can be saved as bitmap images and the vertex data can be exported as a POV-Ray mesh.

Download Seashell.jar
Download source code and example data files

NB this program was written in 2000 as part of my computer science Masters degree; it does have some minor bugs and unfortunately I haven't found the time to completely perfect it.


Attractors


Attractors is a small java app that finds and plots strange attractors. There are currently six different types of attractor, selected from the drop-down list. 'Pick' starts the program looking for a stable attractor (i.e., one that doesn't collapse to zero or escape to infinity). Once found, an attractor can be tweaked, replotted with a higher iteration count (the other drop-down) or saved as a data file.

Currently, the java app does not allow saving as an image file. However, I have also written a command-line tool for plotting the .txt data files and saving the bitmap images in Targa format.

Download Attractor.jar
Download source code and example data files
Download Mac/Darwin plot tool (right-click link and select "save link as" if file opens as text)
Download Windows plot tool
Download plotter source code
View ReadMe file for usage instructions.


Click to see full-size collage!

It should be noted that while stable attractors occur quite frequently, very few are actually interesting to look at. You will have to be patient to find nice ones!




Home page

Knot