Files Classes Functions Hierarchy
00001 #include <cassert> 00002 00003 #include <virtualtetrahedron.h> 00004 00005 00006 virtualtetrahedron::virtualtetrahedron() 00007 { 00008 v[0]=0; 00009 v[1]=1; 00010 v[2]=2; 00011 v[3]=3; 00012 } 00013 00014 bool const virtualtetrahedron::validstate() const 00015 { 00016 uint k; 00017 uint i; 00018 bool valid; 00019 for (k=0; k<4; ++k) 00020 { 00021 valid=false; 00022 for (i=0; (i<4)&&(valid==false); ++i) 00023 { 00024 if (v[i]==k) 00025 valid=true; 00026 } 00027 00028 if (valid==false) 00029 return false; 00030 } 00031 00032 return true; 00033 } 00034 00035 void virtualtetrahedron::anticlockwise() 00036 { 00037 uint k = v[0]; 00038 v[0] = v[1]; 00039 v[1] = v[2]; 00040 v[2] = k; 00041 } 00042 00043 void virtualtetrahedron::clockwise() 00044 { 00045 uint k = v[2]; 00046 v[2] = v[1]; 00047 v[1] = v[0]; 00048 v[0] = k; 00049 } 00050 00051 void virtualtetrahedron::left() 00052 { 00053 uint a = v[0]; 00054 uint b = v[2]; 00055 uint c = v[3]; 00056 uint d = v[1]; 00057 00058 v[0] = a; 00059 v[1] = b; 00060 v[2] = c; 00061 v[3] = d; 00062 } 00063 00064 void virtualtetrahedron::right() 00065 { 00066 uint a = v[2]; 00067 uint b = v[1]; 00068 uint c = v[3]; 00069 uint d = v[0]; 00070 00071 v[0] = a; 00072 v[1] = b; 00073 v[2] = c; 00074 v[3] = d; 00075 } 00076 00077 void virtualtetrahedron::down() 00078 { 00079 uint a = v[1]; 00080 uint b = v[0]; 00081 uint c = v[3]; 00082 uint d = v[2]; 00083 00084 v[0] = a; 00085 v[1] = b; 00086 v[2] = c; 00087 v[3] = d; 00088 } 00089 00090 00091 // v[0..2] anticlockwise, v[3]=base 00092 void virtualtetrahedron::set(uintc base) 00093 { 00094 switch (base) 00095 { 00096 case 0: 00097 v[0] = 2; 00098 v[1] = 1; 00099 v[2] = 3; 00100 break; 00101 00102 case 1: 00103 v[0] = 2; 00104 v[1] = 3; 00105 v[2] = 0; 00106 break; 00107 00108 case 2: 00109 v[0] = 1; 00110 v[1] = 0; 00111 v[2] = 3; 00112 break; 00113 00114 case 3: 00115 v[0] = 1; 00116 v[1] = 2; 00117 v[2] = 0; 00118 break; 00119 00120 default: 00121 assert(false); 00122 return; 00123 } 00124 00125 v[3] = base; 00126 } 00127 00128 ostream & operator << (ostream& os, virtualtetrahedron const & x) 00129 { 00130 os << x.v[0] << " " << x.v[1] << " " << x.v[2] << " " << x.v[3]; 00131 return os; 00132 } 00133 00134
1.5.8