// This file was automatically generated by sectors.cpp // This file is part of ephi (http://www.mare.ee/indrek/ephi/) #include "math3d.hpp" // 3x3 transformation matrixes, forward and backwards static transf3d_pair transforms[48] = { {transf3d(1, 0, 0, 0, 0, 1, 0, 1, 0), transf3d(1, 0, 0, 0, 0, 1, 0, 1, 0)}, {transf3d(-1, 0, 0, 0, 0, 1, 0, 1, 0), transf3d(-1, 0, 0, 0, 0, 1, 0, 1, 0)}, {transf3d(0, 1, 0, 0, 0, 1, 1, 0, 0), transf3d(0, 0, 1, 1, 0, 0, 0, 1, 0)}, {transf3d(0, -1, 0, 0, 0, 1, 1, 0, 0), transf3d(0, 0, 1, -1, 0, 0, 0, 1, 0)}, {transf3d(0, 0, 1, 0, 1, 0, 1, 0, 0), transf3d(0, 0, 1, 0, 1, 0, 1, 0, 0)}, {transf3d(0, 0, -1, 0, 1, 0, 1, 0, 0), transf3d(0, 0, 1, 0, 1, 0, -1, 0, 0)}, {transf3d(1, 0, 0, 0, 1, 0, 0, 0, 1), transf3d(1, 0, 0, 0, 1, 0, 0, 0, 1)}, {transf3d(-1, 0, 0, 0, 1, 0, 0, 0, 1), transf3d(-1, 0, 0, 0, 1, 0, 0, 0, 1)}, {transf3d(0, 1, 0, 1, 0, 0, 0, 0, 1), transf3d(0, 1, 0, 1, 0, 0, 0, 0, 1)}, {transf3d(0, -1, 0, 1, 0, 0, 0, 0, 1), transf3d(0, 1, 0, -1, 0, 0, 0, 0, 1)}, {transf3d(0, 0, 1, 1, 0, 0, 0, 1, 0), transf3d(0, 1, 0, 0, 0, 1, 1, 0, 0)}, {transf3d(0, 0, -1, 1, 0, 0, 0, 1, 0), transf3d(0, 1, 0, 0, 0, 1, -1, 0, 0)}, {transf3d(1, 0, 0, 0, -1, 0, 0, 0, 1), transf3d(1, 0, 0, 0, -1, 0, 0, 0, 1)}, {transf3d(-1, 0, 0, 0, -1, 0, 0, 0, 1), transf3d(-1, 0, 0, 0, -1, 0, 0, 0, 1)}, {transf3d(0, 1, 0, -1, 0, 0, 0, 0, 1), transf3d(0, -1, 0, 1, 0, 0, 0, 0, 1)}, {transf3d(0, -1, 0, -1, 0, 0, 0, 0, 1), transf3d(0, -1, 0, -1, 0, 0, 0, 0, 1)}, {transf3d(0, 0, 1, -1, 0, 0, 0, 1, 0), transf3d(0, -1, 0, 0, 0, 1, 1, 0, 0)}, {transf3d(0, 0, -1, -1, 0, 0, 0, 1, 0), transf3d(0, -1, 0, 0, 0, 1, -1, 0, 0)}, {transf3d(1, 0, 0, 0, 0, 1, 0, -1, 0), transf3d(1, 0, 0, 0, 0, -1, 0, 1, 0)}, {transf3d(-1, 0, 0, 0, 0, 1, 0, -1, 0), transf3d(-1, 0, 0, 0, 0, -1, 0, 1, 0)}, {transf3d(0, 1, 0, 0, 0, 1, -1, 0, 0), transf3d(0, 0, -1, 1, 0, 0, 0, 1, 0)}, {transf3d(0, -1, 0, 0, 0, 1, -1, 0, 0), transf3d(0, 0, -1, -1, 0, 0, 0, 1, 0)}, {transf3d(0, 0, 1, 0, 1, 0, -1, 0, 0), transf3d(0, 0, -1, 0, 1, 0, 1, 0, 0)}, {transf3d(0, 0, -1, 0, 1, 0, -1, 0, 0), transf3d(0, 0, -1, 0, 1, 0, -1, 0, 0)}, {transf3d(1, 0, 0, 0, 0, -1, 0, -1, 0), transf3d(1, 0, 0, 0, 0, -1, 0, -1, 0)}, {transf3d(-1, 0, 0, 0, 0, -1, 0, -1, 0), transf3d(-1, 0, 0, 0, 0, -1, 0, -1, 0)}, {transf3d(0, 1, 0, 0, 0, -1, -1, 0, 0), transf3d(0, 0, -1, 1, 0, 0, 0, -1, 0)}, {transf3d(0, -1, 0, 0, 0, -1, -1, 0, 0), transf3d(0, 0, -1, -1, 0, 0, 0, -1, 0)}, {transf3d(0, 0, 1, 0, -1, 0, -1, 0, 0), transf3d(0, 0, -1, 0, -1, 0, 1, 0, 0)}, {transf3d(0, 0, -1, 0, -1, 0, -1, 0, 0), transf3d(0, 0, -1, 0, -1, 0, -1, 0, 0)}, {transf3d(1, 0, 0, 0, -1, 0, 0, 0, -1), transf3d(1, 0, 0, 0, -1, 0, 0, 0, -1)}, {transf3d(-1, 0, 0, 0, -1, 0, 0, 0, -1), transf3d(-1, 0, 0, 0, -1, 0, 0, 0, -1)}, {transf3d(0, 1, 0, -1, 0, 0, 0, 0, -1), transf3d(0, -1, 0, 1, 0, 0, 0, 0, -1)}, {transf3d(0, -1, 0, -1, 0, 0, 0, 0, -1), transf3d(0, -1, 0, -1, 0, 0, 0, 0, -1)}, {transf3d(0, 0, 1, -1, 0, 0, 0, -1, 0), transf3d(0, -1, 0, 0, 0, -1, 1, 0, 0)}, {transf3d(0, 0, -1, -1, 0, 0, 0, -1, 0), transf3d(0, -1, 0, 0, 0, -1, -1, 0, 0)}, {transf3d(1, 0, 0, 0, 1, 0, 0, 0, -1), transf3d(1, 0, 0, 0, 1, 0, 0, 0, -1)}, {transf3d(-1, 0, 0, 0, 1, 0, 0, 0, -1), transf3d(-1, 0, 0, 0, 1, 0, 0, 0, -1)}, {transf3d(0, 1, 0, 1, 0, 0, 0, 0, -1), transf3d(0, 1, 0, 1, 0, 0, 0, 0, -1)}, {transf3d(0, -1, 0, 1, 0, 0, 0, 0, -1), transf3d(0, 1, 0, -1, 0, 0, 0, 0, -1)}, {transf3d(0, 0, 1, 1, 0, 0, 0, -1, 0), transf3d(0, 1, 0, 0, 0, -1, 1, 0, 0)}, {transf3d(0, 0, -1, 1, 0, 0, 0, -1, 0), transf3d(0, 1, 0, 0, 0, -1, -1, 0, 0)}, {transf3d(1, 0, 0, 0, 0, -1, 0, 1, 0), transf3d(1, 0, 0, 0, 0, 1, 0, -1, 0)}, {transf3d(-1, 0, 0, 0, 0, -1, 0, 1, 0), transf3d(-1, 0, 0, 0, 0, 1, 0, -1, 0)}, {transf3d(0, 1, 0, 0, 0, -1, 1, 0, 0), transf3d(0, 0, 1, 1, 0, 0, 0, -1, 0)}, {transf3d(0, -1, 0, 0, 0, -1, 1, 0, 0), transf3d(0, 0, 1, -1, 0, 0, 0, -1, 0)}, {transf3d(0, 0, 1, 0, -1, 0, 1, 0, 0), transf3d(0, 0, 1, 0, -1, 0, 1, 0, 0)}, {transf3d(0, 0, -1, 0, -1, 0, 1, 0, 0), transf3d(0, 0, 1, 0, -1, 0, -1, 0, 0)} }; // translates a generic point into the specific sector in the 1/48 space // the specific sector is limited by following planes: // (1, 0, 0), (0, 1, 0), (0, 0, 1), (1, 0, -1), (0, -1, 1) // returns the transformation matrix used and also an inverse of the matrix // that can be used to translate back const transf3d_pair& cube_polywell_transform (vect3d& p) { bool xge0 = p.x >= 0; bool yge0 = p.y >= 0; bool zge0 = p.z >= 0; if ( xge0 ) { if ( yge0 ) { if ( zge0 ) { if ( p.x - p.y >= 0 ) { if ( p.x - p.z >= 0 ) { if ( p.y - p.z >= 0 ) { p = vect3d(p.x, p.z, p.y); return transforms[0]; } else { p = vect3d(p.x, p.y, p.z); return transforms[6]; } } else { p = vect3d(p.z, p.y, p.x); return transforms[4]; } } else { if ( p.x - p.z >= 0 ) { p = vect3d(p.y, p.z, p.x); return transforms[2]; } else { if ( p.y - p.z >= 0 ) { p = vect3d(p.y, p.x, p.z); return transforms[8]; } else { p = vect3d(p.z, p.x, p.y); return transforms[10]; } } } } else { if ( p.x - p.y >= 0 ) { if ( p.x + p.z >= 0 ) { if ( p.y + p.z >= 0 ) { p = vect3d(p.x, -p.z, p.y); return transforms[42]; } else { p = vect3d(p.x, p.y, -p.z); return transforms[36]; } } else { p = vect3d(-p.z, p.y, p.x); return transforms[5]; } } else { if ( p.x + p.z >= 0 ) { p = vect3d(p.y, -p.z, p.x); return transforms[44]; } else { if ( p.y + p.z >= 0 ) { p = vect3d(p.y, p.x, -p.z); return transforms[38]; } else { p = vect3d(-p.z, p.x, p.y); return transforms[11]; } } } } } else { if ( zge0 ) { if ( p.x + p.y >= 0 ) { if ( p.x - p.z >= 0 ) { if ( p.y + p.z >= 0 ) { p = vect3d(p.x, -p.y, p.z); return transforms[12]; } else { p = vect3d(p.x, p.z, -p.y); return transforms[18]; } } else { p = vect3d(p.z, -p.y, p.x); return transforms[46]; } } else { if ( p.x - p.z >= 0 ) { p = vect3d(-p.y, p.z, p.x); return transforms[3]; } else { if ( p.y + p.z >= 0 ) { p = vect3d(p.z, p.x, -p.y); return transforms[40]; } else { p = vect3d(-p.y, p.x, p.z); return transforms[9]; } } } } else { if ( p.x + p.y >= 0 ) { if ( p.x + p.z >= 0 ) { if ( p.y - p.z >= 0 ) { p = vect3d(p.x, -p.y, -p.z); return transforms[30]; } else { p = vect3d(p.x, -p.z, -p.y); return transforms[24]; } } else { p = vect3d(-p.z, -p.y, p.x); return transforms[47]; } } else { if ( p.x + p.z >= 0 ) { p = vect3d(-p.y, -p.z, p.x); return transforms[45]; } else { if ( p.y - p.z >= 0 ) { p = vect3d(-p.z, p.x, -p.y); return transforms[41]; } else { p = vect3d(-p.y, p.x, -p.z); return transforms[39]; } } } } } } else { if ( yge0 ) { if ( zge0 ) { if ( p.x + p.y >= 0 ) { if ( p.x + p.z >= 0 ) { if ( p.y - p.z >= 0 ) { p = vect3d(p.y, -p.x, p.z); return transforms[14]; } else { p = vect3d(p.z, -p.x, p.y); return transforms[16]; } } else { p = vect3d(p.y, p.z, -p.x); return transforms[20]; } } else { if ( p.x + p.z >= 0 ) { p = vect3d(p.z, p.y, -p.x); return transforms[22]; } else { if ( p.y - p.z >= 0 ) { p = vect3d(-p.x, p.z, p.y); return transforms[1]; } else { p = vect3d(-p.x, p.y, p.z); return transforms[7]; } } } } else { if ( p.x + p.y >= 0 ) { if ( p.x - p.z >= 0 ) { if ( p.y + p.z >= 0 ) { p = vect3d(p.y, -p.x, -p.z); return transforms[32]; } else { p = vect3d(-p.z, -p.x, p.y); return transforms[17]; } } else { p = vect3d(p.y, -p.z, -p.x); return transforms[26]; } } else { if ( p.x - p.z >= 0 ) { p = vect3d(-p.z, p.y, -p.x); return transforms[23]; } else { if ( p.y + p.z >= 0 ) { p = vect3d(-p.x, -p.z, p.y); return transforms[43]; } else { p = vect3d(-p.x, p.y, -p.z); return transforms[37]; } } } } } else { if ( zge0 ) { if ( p.x - p.y >= 0 ) { if ( p.x + p.z >= 0 ) { if ( p.y + p.z >= 0 ) { p = vect3d(p.z, -p.x, -p.y); return transforms[34]; } else { p = vect3d(-p.y, -p.x, p.z); return transforms[15]; } } else { p = vect3d(-p.y, p.z, -p.x); return transforms[21]; } } else { if ( p.x + p.z >= 0 ) { p = vect3d(p.z, -p.y, -p.x); return transforms[28]; } else { if ( p.y + p.z >= 0 ) { p = vect3d(-p.x, -p.y, p.z); return transforms[13]; } else { p = vect3d(-p.x, p.z, -p.y); return transforms[19]; } } } } else { if ( p.x - p.y >= 0 ) { if ( p.x - p.z >= 0 ) { if ( p.y - p.z >= 0 ) { p = vect3d(-p.z, -p.x, -p.y); return transforms[35]; } else { p = vect3d(-p.y, -p.x, -p.z); return transforms[33]; } } else { p = vect3d(-p.y, -p.z, -p.x); return transforms[27]; } } else { if ( p.x - p.z >= 0 ) { p = vect3d(-p.z, -p.y, -p.x); return transforms[29]; } else { if ( p.y - p.z >= 0 ) { p = vect3d(-p.x, -p.y, -p.z); return transforms[31]; } else { p = vect3d(-p.x, -p.z, -p.y); return transforms[25]; } } } } } } }