THE UNIVERSITY OF BIRMINGHAM

School of Computer Science

SEM243/SEM244 Software Workshop

Semester 2 Team Exercise 2000

The Requirements

The aim is to develop a complete program that flexibly displays data.

Ideally it should consist of a number of threads that run concurrently. The complete program should handle a variety of data display functions as described below.

The program should run under UNIX on the Suns.

The whole task is formulated as a number of separate modules within a single large program. Some modules may be implemented as separate threads that run concurrently: it is up to you to decide which modules are most appropriate for this. You can use these modules as a convenient way of subdividing the work amongst members of your team, but it is not necessary to subdivide the work in this way. If you wish to subdivide the work in another way (e.g. by classes in your program design), then you are free to do this. The modular structure is intended primarily to help in describing the program specification, and also as a first suggestion for the structure of the implementation, but it is not intended as a straightjacket: you may vary it if you have good reasons for so doing (however, you should not change it for trivial or unsound reasons).

 

Data module

This module provides a single interface to loading data. It has to be capable of taking data from

The data will be in a defined format, which you have to parse. When the user clicks on the button to perform this operation, a file browser is displayed so that the user can select the file to be loaded.

The format of the file should be checked, and unacceptable formats rejected.

When the data is successfully loaded, the program should then be in a position to utilise some of the modules described below.

2-d Display Module

This module creates a window on screen and displays two different dimensions of the data plotted against each other. These dimensions should be user-selectable. It should be possible to run several concurrently, each displaying a different representation in its own window on screen.

The following 2-d plots must be implemented:

Axes must be drawn and labelled.

In addition, it should be possible to overlay multiple data dimensions on the y-axis against the same x-axis data on the same graph.

E.g. for the data

1 2 3 4
21 32 42 53
10 8 6 3

graphs similar to those below should be produced

3-d Display Module

This module creates a window on screen and displays three different dimensions of the data. These dimensions should be user-selectable. It should be possible to run several concurrently, each displaying a different representation in its own window on screen.

The following 3-d plots must be implemented:

Optionally, other 3-d representations can be included (wireframes, surfaces, etc.). Contour plots can also be produced.

Axes must be drawn and labelled.

Matrix methods should be used to produce the necessary 2-d coordinates required for the plotting of the 3-d data on the screen. Basic graphics textbooks contain details of these methods. A basic matrix class has been provided which you are free to use, develop, adapt or ignore as you wish.

High-d display module (hard)

This module creates a window on screen and displays multiple (>3) different dimensions of the data. These dimensions should be user-selectable. It should be possible to run several concurrently, each displaying a different representation in its own window on screen. It will clearly be necessary to find a way of representing more than 3 dimensions within a 3-d space. You may choose any method you like. Consult graphics books for some ideas, or come up with your own new ones. Basically, a 3-d object can cast a 2-d shadow - in a similar way, a high-d object can cast a 3-d 'shadow' - how you choose to draw the lines from the object to the 'shadow' determines the mapping and hence the representation.

User Interaction

2 and 3-d

The user must be able to rotate the axes of the graphs and zoom in and out, using the mouse and keyboard as appropriate.

Optionally, but desirably, the system should update all windows as apropriate as the user interacts with one of them. For example, if there were two 3-d displays that shared a dimension in common, zooming in on that dimension in one window should trigger similar zooming in the other window. Ideally, the user should be able to interactively decide which displays are linked and interact, and which are independant and therefore do not.

The user must be able to select areas of the data to examine further. Selected data points should then be made available to be displayed using any of the display modules.

For example, in one 3-d representation there may be a subset of data clustered around the origin. The user may choose to select this, and can then redisplay this independently.

>3-d

Optionally, but desirably, the user interaction should work with the higher dimensional representations also.

Statistics module

You should provide statistical information for relevant selected data, containing at least:

  1. mean
  2. median
  3. mode
  4. max. & min.
  5. standard deviation

For two dimensions of data, the equation of the line of linear regression is also required.

Optionally, further statistical information can be given, for either 2-d or higher dimensions of data.

 

User interface

You must provide a way for the user to manage the options for displaying the data, to manage the multiple windows that can be created, to control the colours that the system uses, and to control the data input. This should be as simple and intuitive to use as possible.