#include "mgraph.h"
-static const unsigned dx[V6]= { +1, +1, 0, -1, -1, 0 },
- dy[V6]= { 0, -Y1, -Y1, 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:
- *
- * 2 1
- * | /
- * |/
- * 3--*--0
- * /|
- * / |
- * 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;
}