Exemple #1
0
void Path::stitch(Sequence::iterator first_replaced,
                  Sequence::iterator last_replaced,
                  Sequence &source)
{
  if (!source.empty()) {
    if ( first_replaced != get_curves().begin() ) {
      if ( (*first_replaced)->initialPoint() != source.front()->initialPoint() ) {
        Curve *stitch = new StitchSegment((*first_replaced)->initialPoint(),
                                          source.front()->initialPoint());
        source.insert(source.begin(), boost::shared_ptr<Curve>(stitch));
      }
    }
    if ( last_replaced != (get_curves().end()-1) ) {
      if ( (*last_replaced)->finalPoint() != source.back()->finalPoint() ) {
        Curve *stitch = new StitchSegment(source.back()->finalPoint(),
                                          (*last_replaced)->finalPoint());
        source.insert(source.end(), boost::shared_ptr<Curve>(stitch));
      }
    }
  } else if ( first_replaced != last_replaced && first_replaced != get_curves().begin() && last_replaced != get_curves().end()-1) {
    if ( (*first_replaced)->initialPoint() != (*(last_replaced-1))->finalPoint() ) {
      Curve *stitch = new StitchSegment((*(last_replaced-1))->finalPoint(),
                                        (*first_replaced)->initialPoint());
      source.insert(source.begin(), boost::shared_ptr<Curve>(stitch));
    }
  }
}
double DeterminatorInterpolated::getPercentile(const Sequence &sequence, int percentile) const {
    size_t size = sequence.size();
    double coeff = 100.0 / size;

    double calcIdx = percentile / coeff - .5;

    if (calcIdx <= 0) return sequence.front();
    if (calcIdx >= size - 1) return sequence.back();

    size_t idx0 = (size_t) floor(calcIdx);
    int v0 = sequence.at(idx0);
    int v1 = sequence.at(idx0 + 1);

    double p0 = 100.0 / size * (idx0);

    double slope = size / 100.0 * (percentile - p0);

    return v0 + (v1 - v0) * slope;
}
 void const_constraints(const Sequence& c) {
   const_reference r = c.front();
   ignore_unused_variable_warning(r);
 }