chiark / gitweb /
remove dead wood; reenable graph_layout_cost
[moebius2.git] / mgraph.h
index acbe5c4b277b39a2c8b92aff3957c1978aae7f26..9cc20eb407e4d4779da311f0f3df661befbf8a6b 100644 (file)
--- a/mgraph.h
+++ b/mgraph.h
@@ -4,43 +4,57 @@
 /*
  * Vertices in strip are numbered as follows:
  *
- *     ___ X-2 ___ X-1 ___ 0   ___ 1   ___ 2   ___ 3   ___ 4   __
- *         Y-1     Y-1      0       0       0       0       0
+ *                       |
+ *     ___ X-2 ___ X-1 ___| 0  ___  1  ___  2  ___  3  ___  4  __
+ *         Y-1     Y-1    |0       0       0       0       0
  *        /  \    /  \    /  \    /  \    /  \    /  \    /  \
- *       /    \  /    \  /    \  /    \  /    \  /    \  /    \
- *     X-3 ___ X-2 ___ X-1 ___ 0   ___ 1   ___ 2   ___  3  ___ 4
- *     Y-2     Y-2     Y-2      1       1       1       1       1
- *       \    /  \    /  \    /  \    /  \    /  \    /  \    /
+ *       /    \  /    \  /|   \  /    \  /    \  /    \  /    \
+ *     X-3 ___ X-2 ___ X-1|___  0  ___  1  ___  2  ___  3  ___  4
+ *     Y-2     Y-2     Y-2|    1       1       1       1       1
+ *       \    /  \    /  \|   /  \    /  \    /  \    /  \    /
  *        \  /    \  /    \  /    \  /    \  /    \  /    \  /
- *     ___ X-3 ___ X-2 ___ X-1 ___ 0   ___ 1   ___ 2   ___ 3   __
- *         Y-3     Y-3     Y-3      2       2       2       2
- *
- *       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .
- *
- *      X-4 ___ X-3 ___ X-2 ___ X-1 ___ 0   ___ 1   ___ 2   ___ 3
- *       1       1       1       1      Y-2     Y-2     Y-2     Y-2
- *        \    /  \    /  \    /  \    /  \    /  \    /  \    /
- *         \  /    \  /    \  /    \  /    \  /    \  /    \  /
- *      ___ X-4 ___ X-3 ___ X-2 ___ X-1 ___ 0   ___ 1   ___ 2   __
- *           0       0       0       0      Y-1     Y-1     Y-1
+ *     ___ X-2 ___ X-1 ___| 0  ___  1  ___  2  ___  3  __   4 ___
+ *         Y-3     Y-3    |2       2       2       2      2
+ *        /  \    /  \    /  \    /  \    /  \    /  \    /  \
+ *       /    \  /    \  /|   \  /    \  /    \  /    \  /    \
+ *     X-3 ___ X-2 ___ X-1|___  0  ___  1  ___  2  ___  3  ___  4
+ *     Y-4     Y-4     Y-4|    3       3       3       3       3
+ *                       |
+ *       .   .   .   .   .|  .   .   .   .   .   .   .   .   .   .
+ *                       |
+ *     ___ X-2 ___ X-1 ___| 0  ___  1  ___  2  ___  3  ___  4 ___
+ *         2       2      |Y-3     Y-3     Y-3     Y-3     Y-3
+ *        /  \    /  \    /  \    /  \    /  \    /  \    /  \
+ *       /    \  /    \  /|   \  /    \  /    \  /    \  /    \
+ *          __ X-2 ___ X-1|___  0  ___  1  ___  2  ___  3  ___  3  ___  4
+ *             1       1  |    Y-2     Y-2     Y-2     Y-2     Y-2     Y-2
+ *    /  \    /  \    /  \|   /  \    /  \    /         \    /  \    /
+ *   /    \  /    \  /    \  /    \  /    \  /   \  /    \  /
+ *  -3 ___ X-2 ___ X-1 ___| 0  ___  1  ___  2  ___  3  ___  4 ___
+ *  0      0       0      |Y-1     Y-1     Y-1     Y-1     Y-1
+ *                       |
+ *                        ^ join, where there is
+ *                           a discontinuity in numbering
  *
  * Node x,y for
- *   0 <= x < X     x = distance along
- *   0 <= y < Y     y = distance across
+ *   0 <= x < X = 2^XBITS     x = distance along
+ *   0 <= y < Y = 2^YBITS-1     y = distance across
  *
  * Vertices are in reading order from diagram above ie x varies fastest.
  *
- * Y must be even.  The actual location opposite (0,0) is (X-(Y-1)/2,0),
- * and likewise opposite (0,Y-1) is ((Y-1)/2,0).
+ * Note that though presentation above is equilateral triangles, this
+ * is not the case.  It's actually a square lattice with half of the
+ * diagonals added.  We can't straighten it out because at the join
+ * the diagonals point the other way!
  *
  * We label edges as follows:
  *
- *             e:          \2   /1
- *                          \  /
- *                       ___ 0   __
- *                       3    1   0
- *                          /  \
- *                        4/   5\
+ *                 \2   /1
+ *                  \  /
+ *               ___ 0   __
+ *               3    1   0
+ *                  /  \
+ *                4/   5\
  */
 
 #ifndef MGRAPH_H
 
 #include "common.h"
 
-#define XBITS 3
+#define XBITS 4/*3*/
 #define X (1<<XBITS)
-#define YBITS 3
-#define Y (1<<YBITS)
+#define YBITS 3/*3*/
+#define Y ((1<<YBITS) - 1)
 
 /* vertex number:   0000 | y     | x
  *                        YBITS   XBITS
@@ -61,7 +75,7 @@
 #define XMASK (X-1)
 #define YSHIFT XBITS
 #define Y1 (1 << YSHIFT)
-#define YMASK ((Y-1) << YSHIFT)
+#define YMASK (Y << YSHIFT)
 
 #define DIM (N*D3)
 
@@ -76,6 +90,8 @@
 extern int edge_end2(unsigned v1, int e);
 #define EDGE_END2 edge_end2
 
+#define RIM_VERTEX_P(v) (((v) & YMASK) == 0 || ((v) & YMASK) == (Y-1)*Y1)
+
 #define FOR_VEDGE_X(v1,e,v2,init,otherwise)    \
   FOR_VPEDGE((v1),(e))                         \
     if (((v2)= EDGE_END2((v1),(e)),            \