#include #include #include #include #include "geoma.h" #include "geomaData.h" enum { E1 = ( 1 << 0 ), E2 = ( 1 << 1 ), E3 = ( 1 << 2 ), E4 = ( 1 << 3 ), E5 = ( 1 << 4 ), E6 = ( 1 << 5 ), E7 = ( 1 << 6 ) }; std::ostream& operator << ( std::ostream& out, nklein::GeometricAlgebra< double, 7 >& vv ) { bool printedSome = false; for ( unsigned int ii=0; ii < (1 << 7); ++ii ) { double dd = vv[ ii ]; if ( ::fabs( dd ) > 0.00001 ) { if ( printedSome ) { out << " + "; } out << dd << " e_{"; for ( unsigned int jj=0; jj < 7; ++jj ) { if ( ( ii & ( 1 << jj ) ) > 0 ) { out << (jj+1); } } out << "}"; printedSome = true; } } if ( ! printedSome ) { out << "0"; } } int main( int argc, const char* argv[] ) { nklein::GeometricAlgebra< double, 7 > vv; vv[ E1|E2|E4 ] = 1.0; vv[ E2|E3|E5 ] = 1.0; vv[ E3|E4|E6 ] = 1.0; vv[ E4|E5|E7 ] = 1.0; vv[ E1|E5|E6 ] = 1.0; vv[ E2|E6|E7 ] = 1.0; vv[ E1|E3|E7 ] = 1.0; nklein::GeometricAlgebra< double, 7 > e1234567; e1234567[ E1|E2|E3|E4|E5|E6|E7 ] = 1; if ( argc != 15 ) { std::cerr << "Must give 14 components representing two 7-d vectors" << std::endl; return __LINE__; } nklein::GeometricAlgebra< double, 7 > aa; nklein::GeometricAlgebra< double, 7 > bb; for ( unsigned int ii=0; ii < 7; ++ii ) { aa[ ( 1 << ii ) ] = ::strtod( argv[ ii+1 ], 0 ); bb[ ( 1 << ii ) ] = ::strtod( argv[ ii+8 ], 0 ); } nklein::GeometricAlgebra< double, 7 > ww( aa ^ bb ); nklein::GeometricAlgebra< double, 7 > cc( ( ww ^ ( vv * e1234567 ) ) * e1234567 ); std::cout << aa << " x " << bb << " = " << cc << std::endl; return 0; }