Exemplo n.º 1
0
float Marker::getRatio(float o) {
// deprivated
// derivate of old2new
// hardcode the derivate to improve performance
  switch (getInterpolationMode()) {
    // linear
    case 0: {
      int i=getAreaOld(o);
      if (i<0 || i+1>getLength()-1) return 0;
      float dold=(getOld(i+1)-getOld(i));
      if (dold<=0) return 0;
      return (getNew(i+1)-getNew(i))/dold;
    } break;
    default: {
      // approxmiate ratio
      float n=100; // TODO automate this
      float o1=o-1/n;
      if (o1<0) o1=0;
      if (o1>1) return 0;
      float o2=o+1/n;
      if (o2<0) return 0;
      if (o2>1) o2=1;
      if (o2-o1<=0) return 0;
      return ((old2new(o2)-old2new(o1))/(o2-o1));
    }
  }
}
Exemplo n.º 2
0
int Sample::process_bg() {
    /*
    This function does the main thing: it stretches the original data as defined by the marker object.
    Therefore it reads data from odata and writes to data.
    */
    _processing=true;
    // setup data
    length=getGuessedLength();
    delete[] data;
    data=new float[length];
    switch (getStretchMode()) {
#ifdef MODE_RUBBERBAND
    case 1:
        RBprocess(olength, data, marker, this);
        break;
#endif
    default: {
        for (int i=0; i<length; ++i) {
            data[i]=getOld(marker->new2old(marker->nnew2new(i/(float)length)));
            setFinished(i/(float)length);
        }
    }
    }
    setFinished(1);
    _processing=false;
    return 0;
}
Exemplo n.º 3
0
void Marker::print() {
  std::cout << "Marker" << std::endl;
  for (int i=0; i<getLength(); ++i) {
    std::cout << i << " ";
    std::cout << getOld(i) << " ";
    std::cout << getNew(i) << std::endl;
  }
}
Exemplo n.º 4
0
float Marker::old2new(float o) {
// this one does all the interpolation!
// for performance reasons you should also hard code the interpolation modes to getRatio(float) and new2old
  switch (getInterpolationMode()) {
//    case 0: // linear is default
    case 1: { // polynominal spline
      return int_poly(this, o);
    } break;
    default: {
      int i=getAreaOld(o);
      if (i<0 || i+1>getLength()-1) return 0;
      // linear interpolation
      //      n    - n_i        o    - o_i
      //   -------------- =  --------------
      //   n_{i+1} - n_i     o_{i+1} - o_i
      return (o-getOld(i))/(getOld(i+1)-getOld(i))*(getNew(i+1)-getNew(i))+getNew(i);
    }
  }
}
Exemplo n.º 5
0
float Marker::new2old(float n) {
// inverse of old2new
// hardcode the derivate to improve performance
  switch (getInterpolationMode()) {
    // linear
    case 0: {
      int i=getAreaNew(n);
      if (i<0 || i+1>getLength()-1) return 0;
      return (n-getNew(i))/(getNew(i+1)-getNew(i))*(getOld(i+1)-getOld(i))+getOld(i);
    } break;
    default: {
      // TODO
      // approximate o;
      float o=n;
      for (int i=1; i<10; ++i) {
        o+=(n-old2new(o))/i;
      }
      return o;
    }
  }
}
Exemplo n.º 6
0
void CSMWorld::AddNestedCommand::undo()
{
    QModelIndex parentIndex = mModel.getModelIndex(mId, mParentColumn);
    mModel.setNestedTable(parentIndex, getOld());
    mModifyParentCommand->undo();
}
Exemplo n.º 7
0
void CSMWorld::DeleteNestedCommand::undo()
{
    const QModelIndex& parentIndex = mModel.getModelIndex(mId, mParentColumn);

    mModel.setNestedTable(parentIndex, getOld());
}
Exemplo n.º 8
0
int Marker::getAreaOld(float o) {
  // TODO n=getNew(i)
  for (int i=0; i<getLength(); ++i)
    if (o<getOld(i)) return i-1;
  return getLength()-1;
}