%%%%%%%
% make_radial.m
% Authors: Laurie Heyer & Lance Harden, Davidson College
% June 30, 2006
%
% Description: Make_radial creates a radial pancake graph for a stack of k
% pancakes. Given a desired center node, root, and the diameter of the
% graph, diam, make_radial separates the nodes of the adjacency matrix into
% ranks based on their distance from the root. It computes x- and
% y-coordinates for the nodes so that each rank of nodes are placed in
% ascending order in concentric circles around the root. The nodes in each
% rank are evenly spaced around their respective circle. Rings allows the
% user to graph selected distance groups. [1 3] would create a graph of
% only the nodes distance 1 and distance 3 from the root.
function make_radial(k,root,diam,rings)
d=[];
dispnodes = [];
if rings(1) == 0
dispnodes(1) = root;
end
A = signedperms(k);
b = length(A);
adj = adjmat(k,1:b);
runningor = zeros(length(adj));
countcord = 1;
r = 0;
x(1) = .5;
y(1) = .5;
nodes{1} = mat2str(A(root,:));
for iring = 1:diam
path = adj^iring & ~runningor;
newd = setdiff(find(path(root,:)),root);
d = [d newd];
num(iring) = length(newd);
r = r + .5/diam;
if ismember(iring,rings)
dispnodes = [dispnodes (countcord+1):(countcord+length(newd))];
end
for icord = 1:length(newd)
x(countcord + icord) = .5 + r*cos(((icord-1) * 2 * pi)/(length(newd)));
y(countcord + icord) = .5 + r*sin(((icord-1) * 2 * pi)/(length(newd)));
nodes{countcord + icord} = mat2str(A(newd(icord),:));
end
countcord = countcord + length(newd);
runningor = runningor | adj^iring;
end
d = [root d];
adj = adj(d,d);
adj = adj(dispnodes,dispnodes);
cd GraphViz2Mat1.2/
figure
graph_draw(adj,'X',x(dispnodes),'Y',y(dispnodes),'linecolor','Green','node_labels',nodes(:,dispnodes),'fontsize',12);
cd ..