package edu.stanford.rsl.conrad.geometry.motion.timewarp;
import edu.stanford.rsl.conrad.utils.VisualizationUtil;
/**
*
* @author akmaier
*
*/
public class DualPhasePeriodicTimeWarper extends TimeWarper {
/**
*
*/
private static final long serialVersionUID = 2589628945345492493L;
protected double phase1;
public DualPhasePeriodicTimeWarper(double portionPhase1, double portionPhase2){
phase1 = (portionPhase1)/(portionPhase1+portionPhase2);
}
@Override
public double warpTime(double time) {
if (time > phase1){
double val = Math.PI / (1-phase1);
val *= (time + 1 - (2*phase1));
return 0.5 - (0.5 * Math.cos(val));
}
return 0.5 - (0.5 * Math.cos(time*(Math.PI/(phase1))));
}
public static void main (String [] args){
TimeWarper warp = new DualPhasePeriodicTimeWarper(2, 3);
TimeWarper warp2 = new HarmonicTimeWarper(1);
double [] values = new double [100];
for (int i =0; i< 100; i++){
values[i] = warp.warpTime(warp2.warpTime(((double)i)/100));
}
VisualizationUtil.createPlot(values).show();
}
/**
* @return the phase1
*/
public double getPhase1() {
return phase1;
}
/**
* @param phase1 the phase1 to set
*/
public void setPhase1(double phase1) {
this.phase1 = phase1;
}
}
/*
* Copyright (C) 2010-2014 Andreas Maier
* CONRAD is developed as an Open Source project under the GNU General Public License (GPL).
*/