Having tried (and failed) to layout fullerene structures using various optimisation methods, I thought I would try direct positioning of the atoms. In other words, 'logical' placement rather than 'physics' based layout. For example:
These are two regular fullerenes that work very well. The algorithm is simple in principle:
1) Given a planar embedding G, calculate the inner dual id(G) and the 'face layers'.
2) The innermost layer is the 'core' which is one of: a single vertex, a connected pair, or a cycle.
3) Layout the core, and then each layer outwards, by spoke and arch.
So, to explain some of this; a 'face layer' is a set of faces all at the same distance from the outer cycle, measured by graph distance on id(G). So the faces adjacent to the outer cycle are the first layer, and the second layer is adjacent to that, and so on. This is roughly illustrated here:
The concentric circles represent the layers of faces, with the innermost being the core. On the right is a cartoon of two spokes on an outer path, connected by a dashed line to show the arch. The outer path starts off as the edges around the core, and is replaced by the arches of the next level.
This method does work - it creates diagrams that are not too horrible - but does not give as good results for the less-symmetric examples. Something like Bojan Mohar's circle-packing method would probably be better, or even a properly implemented spring layout...
Here are some final examples, all with paired-cores:
(The colors are signature classes, by the way. All images made using CDK's new classes. Code here).
These are two regular fullerenes that work very well. The algorithm is simple in principle:
1) Given a planar embedding G, calculate the inner dual id(G) and the 'face layers'.
2) The innermost layer is the 'core' which is one of: a single vertex, a connected pair, or a cycle.
3) Layout the core, and then each layer outwards, by spoke and arch.
So, to explain some of this; a 'face layer' is a set of faces all at the same distance from the outer cycle, measured by graph distance on id(G). So the faces adjacent to the outer cycle are the first layer, and the second layer is adjacent to that, and so on. This is roughly illustrated here:
The concentric circles represent the layers of faces, with the innermost being the core. On the right is a cartoon of two spokes on an outer path, connected by a dashed line to show the arch. The outer path starts off as the edges around the core, and is replaced by the arches of the next level.
This method does work - it creates diagrams that are not too horrible - but does not give as good results for the less-symmetric examples. Something like Bojan Mohar's circle-packing method would probably be better, or even a properly implemented spring layout...
Here are some final examples, all with paired-cores:
(The colors are signature classes, by the way. All images made using CDK's new classes. Code here).
Comments