Ejemplo n.º 1
0
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);
  }
}
Ejemplo n.º 2
0
Archivo: main.cpp Proyecto: henrical/PO
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();
}
Ejemplo n.º 3
0
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;
}
Ejemplo n.º 4
0
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;
}
Ejemplo n.º 5
0
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;
}
Ejemplo n.º 6
0
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;
}
Ejemplo n.º 7
0
Archivo: hd.c Proyecto: hsenju/Kardrobe
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;
}
Ejemplo n.º 8
0
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:;
	}
}