chiark / gitweb /
interpolate and various sizes build
[moebius2.git] / mgraph.h
index eb4bd129fb990bb650d1da0605e780e1a13680af..e98fa850a53658bacf17ff452d03d2341c89afa9 100644 (file)
--- a/mgraph.h
+++ b/mgraph.h
@@ -4,41 +4,45 @@
 /*
  * Vertices in strip are numbered as follows:
  *
- *                       |
+ *                          :axis of symmetry
+ *                       | :
+ *                       | :
  *     ___ X-2 ___ X-1 ___| 0  ___  1  ___  2  ___  3  ___  4  __
- *         Y-1     Y-1    |0       0       0       0       0
- *        /  \    /  \    /  \    /  \    /  \    /  \    /  \
- *       /    \  /    \  /|   \  /    \  /    \  /    \  /    \
+ *         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
- *       \    /  \    /  \|   /  \    /  \    /  \    /  \    /
- *        \  /    \  /    \  /    \  /    \  /    \  /    \  /
+ *     Y-2     Y-2     Y-2| :  1       1       1       1       1
+ *       \    /  \    /  \| : /  \    /  \    /  \    /  \    /
+ *        \  /    \  /    \ :/    \  /    \  /    \  /    \  /
  *     ___ X-2 ___ X-1 ___| 0  ___  1  ___  2  ___  3  __   4 ___
- *         Y-3     Y-3    |2       2       2       2      2
- *        /  \    /  \    /  \    /  \    /  \    /  \    /  \
- *       /    \  /    \  /|   \  /    \  /    \  /    \  /    \
+ *         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
- *                       |
- *       .   .   .   .   .|  .   .   .   .   .   .   .   .   .   .
- *                       |
+ *     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
- *    /  \    /  \    /  \|   /  \    /  \    /         \    /  \    /
- *   /    \  /    \  /    \  /    \  /    \  /   \  /    \  /
+ *             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 = 2^XBITS     x = distance along
- *   0 <= y < Y = 2^YBITS-1     y = distance across
+ *   0 <= y < Y = 2^YBITS-1   y = distance across
  *
  * Vertices are in reading order from diagram above ie x varies fastest.
  *
@@ -55,6 +59,9 @@
  *               3    1   0
  *                  /  \
  *                4/   5\
+ *
+ * vertex number:   0000 | y     | x
+ *                        YBITS   XBITS
  */
 
 #ifndef MGRAPH_H
 
 #include "common.h"
 
+#ifndef DEFBITS
 #define XBITS 3
-#define X (1<<XBITS)
 #define YBITS 3
-#define Y ((1<<YBITS) - 1)
+#else
+#define XBITS (DEFBITS / 10)
+#define YBITS (DEFBITS % 10)
+#endif
 
-/* vertex number:   0000 | y     | x
- *                        YBITS   XBITS
- */
+#define X (1<<XBITS)
+#define Y ((1<<YBITS) - 1)
 
 #define N (X*Y)
 #define XMASK (X-1)
@@ -77,8 +86,6 @@
 #define Y1 (1 << YSHIFT)
 #define YMASK (Y << YSHIFT)
 
-#define DIM (N*D3)
-
 #define V6 6
 
 #define FOR_VERTEX(v) \
 #define FOR_VPEDGE(v,e) \
   for ((e)=0; (e)<V6; (e)++)
 
-extern int edge_end2(unsigned v1, int e);
+int edge_end2(unsigned v1, int e);
 #define EDGE_END2 edge_end2
 
+/* given v1,e  s.t.  v2==EDGE_END2(v1,e) >= 0,
+ * returns  eprime s.t. v1==EDGE_END2(v2,eprime) */
+int edge_reverse(int v1, int e);
+
 #define RIM_VERTEX_P(v) (((v) & YMASK) == 0 || ((v) & YMASK) == (Y-1)*Y1)
 
 #define FOR_VEDGE_X(v1,e,v2,init,otherwise)    \
@@ -112,5 +123,6 @@ extern int edge_end2(unsigned v1, int e);
     for ((vx)=0; (v)= (vy)<<YSHIFT | (vx), (vx)<X; (vx)++)
 
 typedef double Vertices[N][D3];
+struct Vertices { Vertices a; };
 
 #endif /*MGRAPH_H*/