X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ian/git?a=blobdiff_plain;ds=sidebyside;f=mgraph.c;h=23a10e352ffa69bc91f9a4c9185fd911e90dbfd1;hb=190a54bc07e4c1497938a31373543650d3f19c55;hp=222bd094a92be74d70a52a6b0b05606a2a0b337c;hpb=732b811081946ad56d05769de8846b27375b7eb7;p=moebius2.git diff --git a/mgraph.c b/mgraph.c index 222bd09..23a10e3 100644 --- a/mgraph.c +++ b/mgraph.c @@ -4,36 +4,23 @@ #include "mgraph.h" -static const unsigned dx[V6]= { 0, +1, -1, +1, -1, 0 }, - dy[V6]= { +Y1, +Y1, 0, 0, -Y1, -Y1 }; - +static const unsigned dx[2][V6]= {{ +1, 0, -1, -1, -1, 0 }, + { +1, +1, 0, -1, 0, +1 }}, + dy[V6]= { 0, -Y1, -Y1, 0, +Y1, +Y1 }; int edge_end2(unsigned v1, int e) { - /* The topology is equivalent to that of a square lattice with only - * half of the diagonals. Ie, the result of shearing the triangular - * lattice to make the lines of constant x vertical. This gives - * these six directions: - * - * 0 1 - * | / - * |/ - * 2--*--3 - * /| - * / | - * 4 5 - * - * This also handily makes vertical the numbering discontinuity, - * where the join happens. - */ unsigned x, y; y= (v1 & YMASK) + dy[e]; - if (y & ~YMASK) return -1; + if (y >= Y*Y1) return -1; - x= (v1 & XMASK) + dx[e]; + x= (v1 & XMASK) + dx[(v1 >> YSHIFT) & 1][e]; if (x & ~XMASK) { + //int orgy= y; y= (Y-1)*Y1 - y; x &= XMASK;; + //printf("%40s %02x -%d-> %02x (was %02x) \n", "", v1, e, x|y, x|orgy); } + return x | y; }