Exemplo n.º 1
0
  //! Retourne la valeur interpolée d'un point dans le pavage
  float interpolateValue(const Point<N> &Q) {
    bool found = false;
    float value = 0;
    float rapport = 0;
    size_t iSimplex;
    for (iSimplex = 0; iSimplex < multiplex.size(); iSimplex++) {
      if (isInside(Q, multiplex[iSimplex])) {
        found = true;
        break;
      }
    }
    if (!found) {
      cout << "Le point n'est dans aucun simplex" << endl;
      return 0;
    }

    //  le rapport entre le volume du N-simplexe {Q,Fbj} et le volume du
    //  N-simplexe D={Pbj,Fbj}.
    for (int i = 0; i < multiplex[iSimplex].getSize(); i++) {
      Simplex<N> temp;
      temp.pushPoint(Q);
      for (int j = 0; j < multiplex[iSimplex].getSize(); j++) {
        if (i != j)
          temp.pushPoint((multiplex[iSimplex])[j]);
      }
      // temp le simplex {Q,Fbj}
      // <multiplex[iSimplex] le simplex {Pbj,Fbj}
      rapport = temp.calculateVol() / multiplex[iSimplex].calculateVol();
      value += rapport * (multiplex[iSimplex][i]).getValeur();
    }
    return value;
  }
Exemplo n.º 2
0
 //! Initialize the Paving with all points and multiplex
 void init() {
   generate_point();
   Simplex<N> container;
   for (size_t i = 0; i < N + 1; i++) {
     container.pushPoint(multiPoints[i]);
   }
   multiplex.push_back(container);
   for (size_t i = N + 1; i < multiPoints.size(); i++) {
     for (size_t j = 0; j < multiplex.size(); j++) {
       if (isInside(multiPoints[i], multiplex[j])) {
         replaceSimplex(multiPoints[i], multiplex[j]);
         break;
       }
     }
   }
 }