void Ias::update() { irr::core::vector3df p = mesh->getPosition(); Direction d; if ((_dead == true) || (_map->getCell(mC(p.Z, sizeY), mC(p.X, sizeX)) == Tile::EXPLOSION) || (_map->getCell(mC(p.Z, sizeY), mC(p.X, sizeX)) == Tile::EXPLOSION_POWERUP)) { if (_dead == false) { mesh->setVisible(false); for (std::vector<Character *>::iterator it = (*perso).begin(); it != (*perso).end();) { if (this == *it) { it = (*perso).erase(it); } else it++; } } std::cout << "IA DEAD" << std::endl; _dead = true; return; } if (decision) { decision = false; if (!layingBomber()) { if (rand() % 5 == 3) dropBomber(); } if (_pos.size() > 50) { for (unsigned i = 0; i < 15; i++) _pos.erase(_pos.begin()); } if ((d = lookCharacter()) != Direction::NOP) { _direction = d; layingBomber1(); } if ((d = seekBomber()) != Direction::NOP) { _direction = d; } } if (isDead()) { if (isMoving == false) { isMoving = true; mesh->setMD2Animation(irr::scene::EMAT_RUN); } if (!takePowerUp()) { myDirection(); moveIa(); } else movePuwerUp(); } else { isMoving = false; mesh->setMD2Animation(irr::scene::EMAT_STAND); } }
int main() { EconomicEngine eE1; EconomicEngine eE2; EconomicEngine eE3; XtremeEngine xE1; EconomicCar eC(eE1); MediumCar mC(eE2); TopCar tC(eE3, xE1); eC.drive(); eC.stop(); mC.changeEngine(eE3); tC.drive(); tC.stop(); }
Real FitFrames(const std::vector<Vector3>& a,const std::vector<Vector3>& b, RigidTransform& Ta,RigidTransform& Tb,Vector3& cov) { //center at centroid Vector3 ca(Zero),cb(Zero); for(size_t i=0;i<a.size();i++) ca += a[i]; ca /= a.size(); for(size_t i=0;i<b.size();i++) cb += b[i]; cb /= b.size(); Matrix3 C; C.setZero(); for(size_t k=0;k<a.size();k++) { for(int i=0;i<3;i++) for(int j=0;j<3;j++) C(i,j) += (a[k][i]-ca[i])*(b[k][j]-cb[j]); //note the difference from RotationFit } Matrix mC(3,3),mCtC(3,3); Copy(C,mC); SVDecomposition<Real> svd; if(!svd.set(mC)) { cerr<<"FitFrames: Couldn't set svd of covariance matrix"<<endl; Ta.R.setIdentity(); Tb.R.setIdentity(); return Inf; } Copy(svd.U,Ta.R); Copy(svd.V,Tb.R); Copy(svd.W,cov); Tb.R.inplaceTranspose(); Ta.R.inplaceTranspose(); if (Ta.R.determinant() < 0 || Tb.R.determinant() < 0) { //need to sort singular values and negate the column according to the smallest SV svd.sortSVs(); //negate the last column of V and last column of U if(Tb.R.determinant() < 0) { Vector vi; svd.V.getColRef(2, vi); vi.inplaceNegative(); } if(Ta.R.determinant() < 0) { Vector ui; svd.U.getColRef(2, ui); ui.inplaceNegative(); } Copy(svd.U, Ta.R); Copy(svd.V, Tb.R); Copy(svd.W, cov); Tb.R.inplaceTranspose(); Ta.R.inplaceTranspose(); //TODO: these may now both have a mirroring, but they may compose to rotations? } //need these to act as though they subtract off the centroids FIRST then apply rotation Ta.t = -(Ta.R*ca); Tb.t = -(Tb.R*cb); Real sum=0; for(size_t k=0;k<a.size();k++) sum += (Tb.R*(b[k]-cb)).distanceSquared(Ta.R*(a[k]-ca)); return sum; }
Real RotationFit(const vector<Vector3>& a,const vector<Vector3>& b,Matrix3& R) { Assert(a.size() == b.size()); assert(a.size() >= 3); Matrix3 C; C.setZero(); for(size_t k=0;k<a.size();k++) { for(int i=0;i<3;i++) for(int j=0;j<3;j++) C(i,j) += a[k][j]*b[k][i]; } //let A=[a1 ... an]^t, B=[b1 ... bn]^t //solve for min sum of squares of E=ARt-B //let C=AtB //solution is given by CCt = RtCtCR //Solve C^tR = R^tC with SVD CC^t = R^tC^tCR //CtRX = RtCX //C = RCtR //Ct = RtCRt //=> CCt = RCtCRt //solve SVD of C and Ct (giving eigenvectors of CCt and CtC //C = UWVt => Ct=VWUt //=> UWUt = RVWVtRt //=> U=RV => R=UVt Matrix mC(3,3),mCtC(3,3); Copy(C,mC); SVDecomposition<Real> svd; if(!svd.set(mC)) { cerr<<"RotationFit: Couldn't set svd of covariance matrix"<<endl; R.setIdentity(); return Inf; } Matrix mR; mR.mulTransposeB(svd.U,svd.V); Copy(mR,R); if(R.determinant() < 0) { //it's a mirror svd.sortSVs(); if(!FuzzyZero(svd.W(2),(Real)1e-2)) { cerr<<"RotationFit: Uhh... what do we do? SVD of rotation doesn't have a zero singular value"<<endl; /* cerr<<svd.W<<endl; cerr<<"Press any key to continue"<<endl; getchar(); */ } //negate the last column of V Vector vi; svd.V.getColRef(2,vi); vi.inplaceNegative(); mR.mulTransposeB(svd.V,svd.U); Copy(mR,R); Assert(R.determinant() > 0); } Real sum=0; for(size_t k=0;k<a.size();k++) sum += b[k].distanceSquared(R*a[k]); return sum; }
void cGenSysSurResol::GSSR_AddContrainteIndexee ( const std::vector<int> & aVI, REAL * aC, REAL aE ) { AssertPhaseContrainte(); // Gestion specifique des contraintes univariees if ((! mNewCstrIsInit) && mUseSpeciCstrUniVar) { mIsCstr = Im1D_U_INT1(NbVar(),0); mDIsCstr = mIsCstr.data(); mValCstr = Im1D_REAL8(NbVar(),0.0); mDValCstr = mValCstr.data(); mNewCstrIsInit = true; } else { ELISE_ASSERT(mValCstr.tx()==NbVar(),"Sz - Incoherence in GSSR_AddContrainte"); } int aNbVarNN = 0; int aKNN = -1; for (int y=0 ; y<int(aVI.size()) ; y++) { if (aC[y] !=0) { aNbVarNN++; aKNN = y; } } if ((aNbVarNN==1) && mUseSpeciCstrUniVar) { mDIsCstr[aVI[aKNN]] = 1; mValCstr.data()[aVI[aKNN]] = aE/aC[aKNN]; // std::cout << "xrt-CSTR[" << aVI[aKNN] <<"] = " << aE/aC[aKNN] << " C=" << aC[aKNN] << "\n"; return; } // Gestion des contrainte l'ancienne si pas univariee mNbContrainte++; // Premiere contrainte if (mNbContrainte == 1) { ELISE_ASSERT(AcceptContrainteNonUniV(),"Ce systeme n'accepte que les contraintes uni var"); mC.set_to_size(NbVar(),NbVar()); mE.set_to_size(1,NbVar()); // a priori inutile, mais pour initialiser toujours for (int y=0 ; y<NbVar() ; y++) mE(0,y) = 0; mtL.set_to_size(NbVar(),1); mtLC.set_to_size(NbVar(),1); mSol.set_to_size(1,NbVar()); mCSol.set_to_size(1,NbVar()); } mLineCC = NbVar() -mNbContrainte; ELISE_ASSERT(mLineCC>=0,"Too much contrainte in cGenSysSurResol"); for (INT aV=0; aV<NbVar(); aV++) { mC(aV,mLineCC) = 0; } for (int y=0 ; y<int(aVI.size()) ; y++) { mC(aVI[y],mLineCC) = aC[y]; } mE(0,mLineCC) = aE; }
Im1D_REAL8 L2SysSurResol::Solve(bool * aResOk) { if (mOptSym) { ELISE_ASSERT(mNbContrainte==0,"L2SysSurResol::Solve"); for (int aK1=0 ; aK1 <mNbVar ; aK1++) { for (int aK2=0 ; aK2 <aK1 ; aK2++) mDatatLi_Li[aK1][aK2] = mDatatLi_Li[aK2][aK1]; } } // std::cout << "L2SysSurResol " << mDatatLi_Li[0][1] << " " << mDatatLi_Li[1][0] << "\n"; // getchar(); if (mNbContrainte) { INT NbVarTot = mNbVar + mNbContrainte; GaussjPrec aGP(NbVarTot,1); ElMatrix<REAL> & M = aGP.M(); ElMatrix<REAL> & b = aGP.b(); ElMatrix<REAL> & x = aGP.x(); for (INT ky=0;ky <NbVarTot ; ky++) { if (ky < mNbVar) b(0,ky) = mbi_Li.data()[ky]; else b(0,ky) = mE(0,mLineCC+ky-mNbVar); for (INT kx=0;kx <NbVarTot ; kx++) { if ((kx<mNbVar) && (ky<mNbVar)) { M(kx,ky) = mtLi_Li.data()[kx][ky]; } else if ((kx>=mNbVar) && (ky>=mNbVar)) { M(kx,ky) = 0; } else { INT X = std::min(kx,ky); INT Y = std::max(kx,ky); M(kx,ky) = mC(X,mLineCC+Y-mNbVar); } } } bool Ok = aGP.init_rec(); if ( aResOk) *aResOk = Ok; if (Ok) { for (INT k=0; k<6; k++) aGP.amelior_sol(); for (INT kx=0;kx <mNbVar ; kx++) mSolL2.data()[kx] = x(0,kx); } else { ELISE_ASSERT(aResOk,"Singular Matrix in L2SysSurResol::Solve"); } return mSolL2; } GaussjPrec aGP(mNbVar,1); ElMatrix<REAL> & M = aGP.M(); ElMatrix<REAL> & b = aGP.b(); ElMatrix<REAL> & x = aGP.x(); for (INT ky=0;ky <mNbVar ; ky++) { b(0,ky) = mbi_Li.data()[ky]; for (INT kx=0;kx <mNbVar ; kx++) { M(kx,ky) = mtLi_Li.data()[kx][ky]; } } bool Ok = aGP.init_rec(); if (aResOk) *aResOk = Ok; /* cout << "L2SysSurResol::Solve GP " << Ok << "\n"; if (! Ok) { for (INT ky=0;ky <mNbVar ; ky++) { for (INT kx=0;kx <mNbVar ; kx++) { cout << mtLi_Li.data()[kx][ky] << " "; } cout << "\n"; } cout << "----------------\n"; } */ if (Ok) { for (INT k=0; k<6; k++) aGP.amelior_sol(); for (INT kx=0;kx <mNbVar ; kx++) mSolL2.data()[kx] = x(0,kx); } return mSolL2; }
double hyperd(N, K, n, k) { static mpq_t num, num2, den, q; static mpq_t p2, t; static mpf_t f; static int first = 1; double d; double p; if (first) { mpq_init(num); mpq_init(num2); mpq_init(den); mpq_init(q); mpf_init(f); mpq_init(p2); mpq_init(t); first = 0; } switch (hyperd_mode) { case 0: mP(&num, K, k); mP(&p2, N - K, n - k); mpq_mul(num2, num, p2); mH(&p2, k + 1, n - k); mpq_mul(num, num2, p2); mP(&den, N, n); mpq_div(q, num, den); mpf_set_q(f, q); d = mpf_get_d(f); break; case 1: xx: mC(&num2, K, k); mC(&p2, N - K, n - k); mpq_mul(num, num2, p2); mC(&den, N, n); mpq_div(q, num, den); mpf_set_q(f, q); d = mpf_get_d(f); break; case 2: if (k == K || n - k == N - K || n == N) { goto xx; } if (k == 0 || n - k == 0 || n == 0) { goto xx; } p = (double)n / N; d = dB(K, p, k) * dB(N - K, p, n - k) / dB(N, p, n); if (d < 3e-14) { goto xx; } break; default: fprintf(stderr, "internal error\n"); exit(1); /* NOTREACHED */ } return d; }
antlr::RefToken FMTLexer::nextToken() { antlr::RefToken theRetToken; for (;;) { antlr::RefToken theRetToken; int _ttype = antlr::Token::INVALID_TYPE; resetText(); try { // for lexical and char stream error handling switch ( LA(1)) { case 0x22 /* '\"' */ : case 0x27 /* '\'' */ : { mSTRING(true); theRetToken=_returnToken; break; } case 0x28 /* '(' */ : { mLBRACE(true); theRetToken=_returnToken; break; } case 0x29 /* ')' */ : { mRBRACE(true); theRetToken=_returnToken; break; } case 0x2f /* '/' */ : { mSLASH(true); theRetToken=_returnToken; break; } case 0x2c /* ',' */ : { mCOMMA(true); theRetToken=_returnToken; break; } case 0x41 /* 'A' */ : case 0x61 /* 'a' */ : { mA(true); theRetToken=_returnToken; break; } case 0x3a /* ':' */ : { mTERM(true); theRetToken=_returnToken; break; } case 0x24 /* '$' */ : { mNONL(true); theRetToken=_returnToken; break; } case 0x46 /* 'F' */ : case 0x66 /* 'f' */ : { mF(true); theRetToken=_returnToken; break; } case 0x44 /* 'D' */ : case 0x64 /* 'd' */ : { mD(true); theRetToken=_returnToken; break; } case 0x45 /* 'E' */ : case 0x65 /* 'e' */ : { mE(true); theRetToken=_returnToken; break; } case 0x47 /* 'G' */ : case 0x67 /* 'g' */ : { mG(true); theRetToken=_returnToken; break; } case 0x49 /* 'I' */ : case 0x69 /* 'i' */ : { mI(true); theRetToken=_returnToken; break; } case 0x4f /* 'O' */ : case 0x6f /* 'o' */ : { mO(true); theRetToken=_returnToken; break; } case 0x42 /* 'B' */ : case 0x62 /* 'b' */ : { mB(true); theRetToken=_returnToken; break; } case 0x5a /* 'Z' */ : { mZ(true); theRetToken=_returnToken; break; } case 0x7a /* 'z' */ : { mZZ(true); theRetToken=_returnToken; break; } case 0x51 /* 'Q' */ : case 0x71 /* 'q' */ : { mQ(true); theRetToken=_returnToken; break; } case 0x48 /* 'H' */ : case 0x68 /* 'h' */ : { mH(true); theRetToken=_returnToken; break; } case 0x54 /* 'T' */ : case 0x74 /* 't' */ : { mT(true); theRetToken=_returnToken; break; } case 0x4c /* 'L' */ : case 0x6c /* 'l' */ : { mL(true); theRetToken=_returnToken; break; } case 0x52 /* 'R' */ : case 0x72 /* 'r' */ : { mR(true); theRetToken=_returnToken; break; } case 0x58 /* 'X' */ : case 0x78 /* 'x' */ : { mX(true); theRetToken=_returnToken; break; } case 0x2e /* '.' */ : { mDOT(true); theRetToken=_returnToken; break; } case 0x9 /* '\t' */ : case 0x20 /* ' ' */ : { mWHITESPACE(true); theRetToken=_returnToken; break; } case 0x2b /* '+' */ : case 0x2d /* '-' */ : case 0x30 /* '0' */ : case 0x31 /* '1' */ : case 0x32 /* '2' */ : case 0x33 /* '3' */ : case 0x34 /* '4' */ : case 0x35 /* '5' */ : case 0x36 /* '6' */ : case 0x37 /* '7' */ : case 0x38 /* '8' */ : case 0x39 /* '9' */ : { mNUMBER(true); theRetToken=_returnToken; break; } default: if ((LA(1) == 0x43 /* 'C' */ ) && (LA(2) == 0x4d /* 'M' */ ) && (LA(3) == 0x4f /* 'O' */ ) && (LA(4) == 0x41 /* 'A' */ )) { mCMOA(true); theRetToken=_returnToken; } else if ((LA(1) == 0x43 /* 'C' */ ) && (LA(2) == 0x4d /* 'M' */ ) && (LA(3) == 0x4f /* 'O' */ ) && (LA(4) == 0x49 /* 'I' */ )) { mCMOI(true); theRetToken=_returnToken; } else if ((LA(1) == 0x43 /* 'C' */ ) && (LA(2) == 0x4d /* 'M' */ ) && (LA(3) == 0x6f /* 'o' */ )) { mCMoA(true); theRetToken=_returnToken; } else if ((LA(1) == 0x43 /* 'C' */ ) && (LA(2) == 0x44 /* 'D' */ ) && (LA(3) == 0x49 /* 'I' */ )) { mCDI(true); theRetToken=_returnToken; } else if ((LA(1) == 0x43 /* 'C' */ ) && (LA(2) == 0x4d /* 'M' */ ) && (LA(3) == 0x49 /* 'I' */ )) { mCMI(true); theRetToken=_returnToken; } else if ((LA(1) == 0x43 /* 'C' */ ) && (LA(2) == 0x53 /* 'S' */ ) && (LA(3) == 0x49 /* 'I' */ )) { mCSI(true); theRetToken=_returnToken; } else if ((LA(1) == 0x43 /* 'C' */ ) && (LA(2) == 0x53 /* 'S' */ ) && (LA(3) == 0x46 /* 'F' */ )) { mCSF(true); theRetToken=_returnToken; } else if ((LA(1) == 0x43 /* 'C' */ ) && (LA(2) == 0x44 /* 'D' */ ) && (LA(3) == 0x57 /* 'W' */ )) { mCDWA(true); theRetToken=_returnToken; } else if ((LA(1) == 0x43 /* 'C' */ ) && (LA(2) == 0x44 /* 'D' */ ) && (LA(3) == 0x77 /* 'w' */ )) { mCDwA(true); theRetToken=_returnToken; } else if ((LA(1) == 0x43 /* 'C' */ ) && (LA(2) == 0x41 /* 'A' */ ) && (LA(3) == 0x50 /* 'P' */ )) { mCAPA(true); theRetToken=_returnToken; } else if ((LA(1) == 0x43 /* 'C' */ ) && (LA(2) == 0x41 /* 'A' */ ) && (LA(3) == 0x70 /* 'p' */ )) { mCApA(true); theRetToken=_returnToken; } else if ((LA(1) == 0x25 /* '%' */ ) && (LA(2) == 0x22 /* '\"' */ || LA(2) == 0x27 /* '\'' */ )) { mCSTRING(true); theRetToken=_returnToken; } else if ((LA(1) == 0x43 /* 'C' */ ) && (LA(2) == 0x6d /* 'm' */ )) { mCmoA(true); theRetToken=_returnToken; } else if ((LA(1) == 0x43 /* 'C' */ ) && (LA(2) == 0x59 /* 'Y' */ )) { mCYI(true); theRetToken=_returnToken; } else if ((LA(1) == 0x43 /* 'C' */ ) && (LA(2) == 0x48 /* 'H' */ )) { mCHI(true); theRetToken=_returnToken; } else if ((LA(1) == 0x43 /* 'C' */ ) && (LA(2) == 0x68 /* 'h' */ )) { mChI(true); theRetToken=_returnToken; } else if ((LA(1) == 0x43 /* 'C' */ ) && (LA(2) == 0x64 /* 'd' */ )) { mCdwA(true); theRetToken=_returnToken; } else if ((LA(1) == 0x43 /* 'C' */ ) && (LA(2) == 0x61 /* 'a' */ )) { mCapA(true); theRetToken=_returnToken; } else if ((LA(1) == 0x43 /* 'C' */ || LA(1) == 0x63 /* 'c' */ ) && (true)) { mC(true); theRetToken=_returnToken; } else if ((LA(1) == 0x25 /* '%' */ ) && (true)) { mPERCENT(true); theRetToken=_returnToken; } else { if (LA(1)==EOF_CHAR) { uponEOF(); _returnToken = makeToken(antlr::Token::EOF_TYPE); } else {throw antlr::NoViableAltForCharException(LA(1), getFilename(), getLine(), getColumn());} } } if ( !_returnToken ) goto tryAgain; // found SKIP token _ttype = _returnToken->getType(); _ttype = testLiteralsTable(_ttype); _returnToken->setType(_ttype); return _returnToken; } catch (antlr::RecognitionException& e) { throw antlr::TokenStreamRecognitionException(e); } catch (antlr::CharStreamIOException& csie) { throw antlr::TokenStreamIOException(csie.io); } catch (antlr::CharStreamException& cse) { throw antlr::TokenStreamException(cse.getMessage()); } tryAgain:; } }