Beispiel #1
0
Vecteur<double> Capteur::StatsPropres()
// Algorithme :
{
	// Creation de la structure de retour et variables pratiques
	Vecteur<double> statsRetour;
	double total =	d1Resume[4] + d2Resume[4] + d3Resume[4] + d4Resume[4] +
					d5Resume[4] + d6Resume[4] + d7Resume[4];
	double statTrafic;

	// Remplissage
	for (int i = 0; i < TAILLE_RESUME - 1; i++)
	{
		if ( total != 0 )
		{
			statTrafic = ( d1Resume[i] + d2Resume[i] + d3Resume[i] + d4Resume[i] +
				d5Resume[i] + d6Resume[i] + d7Resume[i] ) / total;			
		}
		else
		{
			statTrafic = 0;
		}
		statsRetour.insererFin(statTrafic);
	}
	
	return statsRetour;

} //----- Fin de StatsPropres
Beispiel #2
0
void Particule::setPosInt(Vecteur pos)
{
    m_pos = pos;
    m_pos2 = pos;
    m_x = (int)pos.getX();
    m_y = (int)pos.getY();
}
Beispiel #3
0
Vecteur<int> Capteur::EmbouteillageJour( int d7 )
// Algorithme :
// Structure de retour :	Vecteur 0->23 : nombre d'embouteillage recense par heure
//							24->47 : nombre total de donnees par heure
{
	// Création structure de retour et variables pratiques
	Vecteur<int> donneesRetour;
	Vecteur<Evenement>* jour = nullptr;
	Trafic trafic;

	// Détermination de la branche dans laquelle prendre les données
	switch ( d7 )
	{
	case 1:
		jour = &d1Contenu;
		break;
	case 2:
		jour = &d2Contenu;
		break;
	case 3:
		jour = &d3Contenu;
		break;
	case 4:
		jour = &d4Contenu;
		break;
	case 5:
		jour = &d5Contenu;
		break;
	case 6:
		jour = &d6Contenu;
		break;
	case 7:
		jour = &d7Contenu;
		break;
	default:
		// Erreur : mauvaise demande de jour
		break;
	}  //----- Fin de switch ( d7 )

	// Init de la structure de retour
	for ( int i = 0; i < 48; i++ )
	{
		donneesRetour.insererFin(0);
	}

	// Parcours du tableau d'événements et remplissage de la structure de retour
	for (int i = 0; i < jour->GetTaille(); i++)
	{
		trafic = (*jour)[i].GetTrafic();
		if ( trafic == R || trafic == N )
		{
			donneesRetour[(*jour)[i].GetHeure()] += 1;
		}
		donneesRetour[(*jour)[i].GetHeure() + 24] += 1;		// TODO: plus rapide avec creation de variable ?
	}

	return donneesRetour;

} //----- Fin de EmbouteillageJour
	//produit vectoriel
	Vecteur operator^(const Vecteur & v) const
	{
		Vecteur res;
		res.x() = (*this).y()*v.z() - (*this).z()*v.y();
		res.y() = (*this).z()*v.x() - (*this).x()*v.z();
		res.z() = (*this).x()*v.y() - (*this).y()*v.x();
		return res;
	}
	//division par un scalaire
	Vecteur operator/ (double d) const
	{
		Vecteur res;
		res.x() = x()/d;
		res.y() = y()/d;
		res.z() = z()/d;
		return res;
	}
	//operateur unaire negatif
	Vecteur operator- () const
	{
		Vecteur res;
		res.x() = -x();
		res.y() = -y();
		res.z() = -z();
		return res;
	}
Beispiel #7
0
Vecteur_Creux Vecteur_Creux::operator+(const Vecteur_Creux& v2) const
{
    // pour stocker les indices utiles et les valeurs utiles du vecteur résultat
    int* ixres = new int[nbu + v2.nbu];
    int* utres = new int[nbu + v2.nbu];
    // pour calculer le nb de valeurs utiles du vecteur résultat
    int nbures = 0;

    // on parcourt en parallèle les indices utiles du vecteur 1 (l'objet courant)
    // et du vecteur 2 (v2)
      
    int i1 = 0, i2 = 0; // indices de parcours des vecteurs des indices utiles
    bool finVect1 = false, finVect2 = false;

    while (!finVect1 || !finVect2) {

        int ind_utile1, ind_utile2;
        if (!finVect1)
            ind_utile1 = vix.get_val(i1);
        if (!finVect2)
            ind_utile2 = v2.vix.get_val(i2);

        if ((ind_utile1 < ind_utile2 && !finVect1) || finVect2) {
            ixres[nbures] = ind_utile1;
            utres[nbures] = vut.get_val(i1);
            i1++;
        }
        else if (ind_utile1 == ind_utile2 && !finVect1 && !finVect2) {
            ixres[nbures] = ind_utile1;
            utres[nbures] = vut.get_val(i1) + v2.vut.get_val(i2);
            i1++; i2++;
        }
        else if ((ind_utile2 < ind_utile1 && !finVect2) || finVect1) {
            ixres[nbures] = ind_utile2;
            utres[nbures] = v2.vut.get_val(i2);
            i2++;
        }
        nbures++;
        if (i1 == nbu)
            finVect1 = true;
        if (i2 == v2.nbu)
            finVect2 = true;
    }

    // nb de valeurs réelles du vecteur résultat : max des 2 nb de valeurs réelles
    int nbrres = (nbr > v2.nbr)? nbr : v2.nbr;

    Vecteur vutres(utres, nbures);
    Vecteur vixres(ixres, nbures);
    Vecteur_Creux vres(vutres, vixres, nbrres);

    delete [] ixres;
    delete [] utres;

    return vres;
}
Beispiel #8
0
Vecteur XMLtoVecteur::xmlToVecteur(TiXmlElement* v) 
{
	Vecteur vecteur;
	
	vecteur.setP1(this->xmlToPoint(v->FirstChildElement()));
	
	vecteur.setP2(this->xmlToPoint(v->FirstChildElement()->NextSiblingElement()));

	return vecteur;	
}
Beispiel #9
0
void Camera::updateAngles() {
    // différence de position
    Vecteur delta = posTar - posCam;
    float r = delta.norm();

    // calcul des angles
    phi = asin(delta.getZ()/r);
    theta = 2*atan(delta.getX()/(delta.getY()+r*cos(phi)));
    phi *= 180 / M_PI;
    theta *= 180 / M_PI;
}
Beispiel #10
0
float calcTforIntersect(Vecteur ni, Point A, Point B, Point Pi, Point Pi1)
{
    Vecteur D = Vecteur(A, B);

    Vecteur W = Vecteur(Pi, A);

    float t = -1;
    float DdotNi = D.DotProduct(ni);
    if (DdotNi != 0)
        t = - W.DotProduct(ni) / DdotNi;
    return t;
}
Vecteur Vecteur::operator+(const Vecteur &vecteur2) const // Somme vectorielle
{
	assert(dim()==vecteur2.dim() && ref() == vecteur2.ref());
	
	Vecteur res(*this);
	
	for(int i=0 ; i<dim() ; i++)
	{
		res[i] += vecteur2[i];
	}
	
	return res;
}
Vecteur Vecteur::operator+(const Vecteur &vecteur2) // Somme vectorielle
{
	assert(dim()==vecteur2.dim() && ( (ref() && vecteur2.ref()) || (!ref() && !vecteur2.ref()) ));
	
	changerDeReferentiel(vecteur2.ref());
	
	Vecteur res(*this);
	
	for(int i=0 ; i<dim() ; i++)
	{
		res[i] += vecteur2[i];
	}
	
	return res;
}
Beispiel #13
0
Vecteur<double> Capteur::StatsJour( int d7 )
// Algorithme :
{
	// Création structure de retour et variables pratiques
	Vecteur<double> statsRetour;
	int * jourTab = nullptr;
	double total;

	// Détermination de la branche dans laquelle prendre les données
	switch ( d7 )
	{
	case 1:
		jourTab = d1Resume;
		break;
	case 2:
		jourTab = d2Resume;
		break;
	case 3:
		jourTab = d3Resume;
		break;
	case 4:
		jourTab = d4Resume;
		break;
	case 5:
		jourTab = d5Resume;
		break;
	case 6:
		jourTab = d6Resume;
		break;
	case 7:
		jourTab = d7Resume;
		break;
	default:
		// Erreur : mauvaise demande de jour
		break;
	}  //----- Fin de switch ( d7 )

	total = jourTab[4];

	// Insertion dans la structure de retour
	statsRetour.insererFin( jourTab[0] / total );
	statsRetour.insererFin( jourTab[1] / total );
	statsRetour.insererFin( jourTab[2] / total );
	statsRetour.insererFin( jourTab[3] / total );

	return statsRetour;

} //----- Fin de StatsJour
Beispiel #14
0
Vecteur<int> Capteur::DonneesJour(int d7)
{
	// Création structure de retour et variables pratiques
	Vecteur<int> donneesRetour;
	int * jourTab = nullptr;

	// Détermination de la branche dans laquelle prendre les données
	switch ( d7 )
	{
	case 1:
		jourTab = d1Resume;
		break;
	case 2:
		jourTab = d2Resume;
		break;
	case 3:
		jourTab = d3Resume;
		break;
	case 4:
		jourTab = d4Resume;
		break;
	case 5:
		jourTab = d5Resume;
		break;
	case 6:
		jourTab = d6Resume;
		break;
	case 7:
		jourTab = d7Resume;
		break;
	default:
		// Erreur : mauvaise demande de jour
		break;
	}  //----- Fin de switch ( d7 )

	// Insertion dans la structure de retour
	donneesRetour.insererFin( jourTab[0] );
	donneesRetour.insererFin( jourTab[1] );
	donneesRetour.insererFin( jourTab[2] );
	donneesRetour.insererFin( jourTab[3] );
	donneesRetour.insererFin( jourTab[4] );

	return donneesRetour;

}  //----- Fin de DonneesJour
Point Point::operator+(Vecteur &vecteur2) const // Somme vectorielle
{
    assert(dim()==vecteur2.dim() && ( (ref() && vecteur2.ref()) || (!ref() && !vecteur2.ref()) ));

    if(ref())
    {
        vecteur2.changerDeReferentiel(ref());
    }

    Point res(*this);

    for(int i=0 ; i<dim() ; i++)
    {
        res[i] += vecteur2[i];
    }

    return res;
}
	//operateur soustraction
	Vecteur operator- (const Vecteur & v) const
	{
		Vecteur res;
		res.x() = x() - v.x();
		res.y() = y() - v.y();
		res.z() = z() - v.z();
		return res;
	}
void Point::changerDeReferentiel(Referentiel* newRef)
{
    if( ref_ && (ref_ != newRef) )
    {
        // Les deux origines sont exprimées dans le référentiel de référence
        Vecteur entreOrigines = ref()->origin() - newRef->origin();

        entreOrigines.changerDeReferentiel(newRef);

        if(!estNul())
        {
            Vecteur::changerDeReferentiel(newRef);
        }

        *this += entreOrigines;

        setRef(newRef);
    }
}
bool Vecteur::operator==(const Vecteur &vecteur2)// Test d'égalité
{
	if(this == &vecteur2)
	{
		return true;
	}
	
	if(dim() != vecteur2.dim())
	{
		return false;
	}
	
	changerDeReferentiel(vecteur2.ref());
	
	bool res = true;
	for(int i=0 ; i<dim() && res ; i++)
	{
		res &= (coord[i]==vecteur2[i]); // On pourrait peut-être introduire un seuil
	}
	return res;
}
Beispiel #19
0
Vecteur_Creux Vecteur_Creux::Sous_Vecteur(int d) const
{
    // pour stocker les indices utiles et les valeurs utiles du sous-vecteur
    int* ixSousVect = new int[nbu];
    int* utSousVect = new int[nbu];

    // parcours des indices utiles du vecteur pour ne garder que ceux < d
    int i = 0;
    while (vix.get_val(i) < d) {
        ixSousVect[i] = vix.get_val(i);
        utSousVect[i] = vut.get_val(i);
        i++;
    }
    int nbuSousVect = i;

    Vecteur vutSousVect(utSousVect, nbuSousVect);
    Vecteur vixSousVect(ixSousVect, nbuSousVect);
    Vecteur_Creux sousVect(vutSousVect, vixSousVect, d);

    delete [] ixSousVect;
    delete [] utSousVect;

    return sousVect;
}
Beispiel #20
0
Vecteur operator-(const Vecteur& v)
{
    return Vecteur(-v.getX(), -v.getY());
}
Beispiel #21
0
Vecteur operator+(const Point& a, const Vecteur& v)
{
    return Vecteur(a.getX() + v.getX(), a.getY() + v.getY());
}
Beispiel #22
0
bool operator==(const Vecteur& a, const Vecteur& b)
{
    return (a.getX() == b.getX() && a.getY() == b.getY());
}
Beispiel #23
0
Vecteur_Creux::Vecteur_Creux(const Vecteur& le_vut, const Vecteur& le_vix, int n)
    : vut(le_vut), vix(le_vix)  // appel du constructeur par copie pour vut et vit
{
    nbr = n;
    nbu = le_vut.taille();
}
Vecteur::Vecteur(const Vecteur &vecteurACopier) //Copie d'un vecteur
{
	init(vecteurACopier.coord, vecteurACopier.ref());
}
Beispiel #25
0
Vent::Vent(Vecteur const& origine, Vecteur const& normale, Vecteur const& longueur, Vecteur const& largeur, double const& profondeur, double const& intensite)
    :ChampForces(intensite * normale), m_origine(origine), m_normale(normale.unitaire()), m_longueur(longueur - (longueur*m_normale)*m_normale), m_largeur(largeur - (largeur*m_normale)*m_normale - (largeur*m_longueur.unitaire())* (m_longueur.unitaire()) ), m_profondeur(profondeur)
{
}
Beispiel #26
0
Param_Inter DiffO::interact(Param_Inter &parag,bool inside,int order){
  Transf parao;
  Vecteur rediff;
  double scal=parag.direct().prod_scalaire(prim->normal());

  // cout<<"Diff0[interact()]poid = "<<parag.poid();prim->qui();
  //  cout<<" Normale  : ";prim->normal().show();
  //  cout<<" Incident : ";parag.direct().show();
   if(scal>0.0){
     //  printf(" Si pas infini, bug... Opaque attaque' par de'rrie`re");
     //prim->qui();
     //cout<<" Normale  : ";prim->normal().show();
     //cout<<" Incident : ";parag.direct().show();
     //cout<<" Origine  : ";parag.origin().show();
  inside=true;
  //sortie inchangee ( eg transparence)
  return parag;
  }
  //raus(scal>0.0,"DiffO[interact] Opaque attaque' par de'rrie`re...");
  Einc+=parao.abs=parao.rediffuse=parag.poid();
  parao.teta=Macos(-scal);
  parao.phi=0.0;

  opti->interact(parao);
  //   cout <<"DiffO[interact] teta redif = "<<parao.teta<<" - phi = "<<parao.phi<<endl; 
  rediff=parag.direct(); 
  if( fabs( rediff.prod_scalaire(prim->normal() ) )>1.0-1e-6 ) {
    rediff[0]=primi().sommets(0)[0]-primi().sommets(1)[0];
    rediff[1]=primi().sommets(0)[1]-primi().sommets(1)[1];
    rediff[2]=primi().sommets(0)[2]-primi().sommets(1)[2];
  }
  else
    rediff=rediff.prod_vectoriel(prim->normal());
  rediff.normalise();
    //parao.phi=rambo.tirage()*M_2PI;
  /*
  rediff=rediff.rotate(prim->normal(), parao.phi);
  rediff.normalise();
  rediff=prim->normal().rotate(rediff,(parao.teta<0.0)?M_PI+parao.teta:parao.teta);
  rediff.normalise();
  */
  Vecteur u,v,w,n;
  
  n[0]=n[1]=sin(parao.teta);
  n[0]*=cos(parao.phi);
  n[1]*=sin(parao.phi);
  n[2]=cos(parao.teta);     
  v=rediff;
  w=prim->normal();
  u=v.prod_vectoriel(w);
  for(register int i=0;i<3;i++){
    rediff[i]= u[i]*n[0] + v[i]*n[1] + w[i]*n[2] ;
  }
  
  //rediff=prim->normal().rotate(rediff,M_PI_2);
  //cout<<"DiffO::interact() : teta = "<<parao.teta<<endl;

  /*
    rediff[0]=cos(parao.phi)*sin(parao.teta);
    rediff[1]=sin(parao.phi)*sin(parao.teta);
    rediff[2]=cos(parao.teta);     
    */
  
  parag.change_direction(rediff);
  // if(parao.rediffuse>0.5) cout<<"interact poid rediffuse = "<<parao.rediffuse<<endl;

  //maj de l'energie du diffuseur
  if(order==0){
     B1st+=parao.rediffuse;
      Eabs[0]+=parao.abs;
  }else
     Eabs[1]+=parao.abs;
  radio+=parao.rediffuse;
  nk++;//cout<<"nk++\n";
  parag.change_poids(parao.rediffuse);
  // cout<<"DiffO[interact()] abs="<<parao.abs<<"=> Eabs ="<<Eabs<<" - Poids = "<<parag.poid()<<endl;
  // cout <<" DiffO[interact()] new direct ";parag.direct().show(); 
  return parag;
}
Beispiel #27
0
Vecteur operator*(int n, const Vecteur& v)
{
    return Vecteur(v.getX() * n, v.getY() * n);
}
Beispiel #28
0
void Capteur::Inserer( Evenement& unEvenement )
// Algorithme :
{
	// Variables permettant de positionner l'insertion
	Vecteur<Evenement>* jour = nullptr;
	int * caseResume = nullptr;

	// Détermination du jour de la semaine
	switch ( unEvenement.GetD7() )
	{
	case 1:
		jour = &d1Contenu;
		caseResume = d1Resume;
		break;
	case 2:
		jour = &d2Contenu;
		caseResume = d2Resume;
		break;
	case 3:
		jour = &d3Contenu;
		caseResume = d3Resume;
		break;
	case 4:
		jour = &d4Contenu;
		caseResume = d4Resume;
		break;
	case 5:
		jour = &d5Contenu;
		caseResume = d5Resume;
		break;
	case 6:
		jour = &d6Contenu;
		caseResume = d6Resume;
		break;
	case 7:
		jour = &d7Contenu;
		caseResume = d7Resume;
		break;
	default:
		// Erreur d'insertion
		break;
	} //----- Fin de switch ( unEvenement.GetD7() )

	// Incrémentation de la bonne case de trafic
	switch ( unEvenement.GetTrafic() )
	{
	case V:
		caseResume[0]++;
		break;
	case J:
		caseResume[1]++;
		break;
	case R:
		caseResume[2]++;
		break;
	default:	// case N:
		caseResume[3]++;
		break;

	} //----- Fin de switch ( unEvenement.GetTrafic() )

	// Insertion dans le vecteur et incrementation du nombre total d'évènements
	jour->insererFin( unEvenement );
	caseResume[4]++;

} //----- Fin de Inserer
Beispiel #29
0
double operator*(Vecteur const& a, Vecteur const& b)
{
    return a.getX()*b.getX() + a.getY()*b.getY();
}
Beispiel #30
0
int Capteur::TempsSegment( int d7, int heure, int minute )
{
	// Création variable de retour et variables pratiques
	int tempsParcours = 0;
	Vecteur<Evenement>* jour = nullptr;

	// Détermination de la branche dans laquelle prendre les données
	switch ( d7 )
	{
	case 1:
		jour = &d1Contenu;
		break;
	case 2:
		jour = &d2Contenu;
		break;
	case 3:
		jour = &d3Contenu;
		break;
	case 4:
		jour = &d4Contenu;
		break;
	case 5:
		jour = &d5Contenu;
		break;
	case 6:
		jour = &d6Contenu;
		break;
	case 7:
		jour = &d7Contenu;
		break;
	default:
		// Erreur : mauvaise demande de jour
		break;
	}  //----- Fin de switch ( d7 )

	for ( int i = 0; i < jour->GetTaille(); i++ )
	{
		// Recherche de l'horaire
		if ( (*jour)[i].GetHeure() == heure && (*jour)[i].GetMinute() == minute )
		{
			switch ( (*jour)[i].GetTrafic() )
			{
			case V:
				tempsParcours += 1;
				break;
			case J:
				tempsParcours += 2;
				break;
			case R:
				tempsParcours += 4;
				break;
			default:	// case N:
				tempsParcours += 10;
				break;
			}
			break;		// On a trouve, on sort de la boucle
		}

	}

	return tempsParcours;

} //----- Fin de TempsSegment