// The Cellular Automata Voronoi Diagram Rule set. // This rule set will partition CA space into regions centered by the // initial sentry points marked by '*', forming a graph similar to the // Voronoi diagram in computational geometry problems. Note that distance // is computed in this system as Dist(P,Q)=Max(|Px-Qx|,|Py-Qy|), NOT by // the usual Cartesian metric. nbr y; int sum, ptr; default value=value; int ntod(nbr x) { rot if (x:==we:) return '>:value'; else rot if (x:==nw:) return 'Q:value'; else return 0; } if (value==0) { sum=0; over each other y: { if (y:value=='*') { sum++; ptr=ntod(y:); } else if (y:value==ntod(y:)) { sum++; ptr=y:value; } else rot if (y:==no: && (y:value=='Q' || y:value=='Q,1')) { ptr='>,1:value'; sum++; } } if (sum==1) value=ptr; else if (sum>=1) value='%'; else rot if (we:value=='%' && (nw:value=='>' && sw:value=='>' || nw:value=='%' && sw:value=='>' || nw:value=='>' && sw:value=='%')) value='%'; } else if (value=='*') value='S'; else rot if (value=='>') { if (ea:value) value='%'; else value=0; } else rot if (value=='Q') { if (se:value || ea:value=='Q,1' || so:value=='Q,3') value='%'; else value=0; }