Proof!Its easy saying something without proof, so it's reasonable to be sceptical if and when I say I have something working and show no screen shots to prove it, strangely like my previous post... On that point here are a few pretty pictures (with Descriptions!).
My first test (for every algorithm) is to draw a simple 2D square - completely inaccurate for testing as there are not enough vertices to gauge accuracy or see any adverse effects the attractive and repulsive forces may have.

As can be seen, the coordinates appear to be well placed with no horribly displacements anyway. One thing you may, and probably should, have picked up on is the lack of edges being drawn. This is due to myself not having included a method for drawing such edges, a simple algorithm with complexity |E| can be added to the current drawer however I am looking into other methods of drawing and viewing graphs. Therefore, it is assumed the edges are placed correctly, so we only look at the placement of vertices (for now).

Above is the 9square example used by many graph drawing theorists, it is essentially 9 2d squares in a 3x3 array and is relatively useful for seeing how the different forces act on the vertices. As can be seen a single vertex is thrown out, surprising and concerning at the time, but logic proved that it was an incorrect chaco file. I bring this up as it greatly affects the projection of the entire layout by (almost exactly) 45 degrees on the Z-axis, which I found interesting (a single particle affecting the entire graph layout. The correct layout is below.

The layout here is very different to that shown by Peter Eades in his journal entry, and has been attributed to a mixture of different coding practices, and some inconsistencies in the algorithm (such as starting positions).
My next test was a disconnected graph designed by myself. Consisting of 11 vertices and 13 edges, it is a hexagon with a triangle (with one loose vertex attached) within. This was designed to see how the algorithm would work with a disconnected graph, you know, out of curiosity...


On the left, is a simple sketch of how I wanted the graph to look, on the Left is the output. The output was quite predictable, I had made a calculated guess that the inner triangle would be thrown out in a random direction due to the repulsive forces. I did not expect the different parts to retain a an accurate layout, however, this makes sense within the code.

A few more tricks were tried to test the algorithm. Above is a standard octagon (or what was meant to be), with an acceptable although still flawed layout. Imagining a very sparse graph, with only edges around the perimeter. The next layout is when each vertex has an edge to every other vertex, a very dense graph - note this is still intended to have an octagonal layout.


The layout for this is still yet to be explained and understood, it could be that the different forces are acting against each other in such a way that no position can be finalised. Increasing the number of times the algorithm is run (100 to 200) has no noticeable effect on the layout.
Speed and EfficiencyThe speed of my implementation is utterly shameful. The good news is, I can see and understand where and why. Eades original implementation was said to be of |V|^2 complexity, and be fast (I/O bound) for graphs under 30vertices.
My implementation is at worst |V|^3, and at best |V|^2 - very very bad. This is due to my method of storing vertices as objects (with adjacent vertices in an array list within), making it necessary to read through all adjacent vertices for each vertex (Which could be as big as all the vertices in the graph, such as in the dense octagon example).
The FutureIt has been planned, that future work will continue to use my extremely inefficient method of storing vertices, until I have reached a further point with the algorithm side of things (after I have implemented a version of Walshaw's multilevel method.
A way of moving GLUT cylinders to act as edges is also planned, instead of using drawLine for a more pleasing aesthetic appeal.
My secondary supervisor, Dr Alan Soper, has also suggested I create an animated version of P.Eades (and other) algorithms so that it is easier for the user to see the changes made to the graph. This will be exceptionally helpful in debugging but will also be better for viewers.
Also a "fourth" dimension was advised, to hold some force if it increases above some level - in a similar way that 2d graphs are sometimes "folded" into 3 dimensions when the forces become too much to handle.
ByeThat's about it for now, It may be that I read over this tomorrow and have to edit half of it, but it the mean time - enjoy. If you have any questions or wish to context something I have written, or just want a copy of my code, please feel free to email me at cc96@gre.ac.uk.