//! 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; }
//! 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; } } } }