content: package edu.stanford.rsl.conrad.geometry.motion.timewarp;
  
  import edu.stanford.rsl.conrad.utils.VisualizationUtil;
  
  
  
  /**
   * Implements a harmonic motion which is n x the original Motion.
   * 
   * @author akmaier
   *
   */
  public class HarmonicTimeWarper extends TimeWarper {
  
  	/**
  	 * 
  	 */
  	private static final long serialVersionUID = 7097330258596613543L;
  	TimeWarper chirpWarper = new ConstantTimeWarper(1);
  	
  	/**
  	 * Creates a new harmonic time warper. The new motion is n-times the old motion.
  	 * @param n
  	 */
  	public HarmonicTimeWarper(double n){
  		this.chirpWarper = new ConstantTimeWarper(n);
  	}
  	
  	public HarmonicTimeWarper(TimeWarper chirpWarper){
  		this.chirpWarper = chirpWarper;
  	}
  	
  	@Override
  	public double warpTime(double time) {
  		double newTime = chirpWarper.warpTime(time)*time;
  		if (newTime > 1.0) {
  			newTime -= Math.floor(newTime);
  		}
  		return newTime;
  	}
  
  	public static void main (String [] args){
  		TimeWarper warp = new HarmonicTimeWarper(2);
  		double [] values = new double [100];
  		for (int i =0; i< 100; i++){
  			values[i] = warp.warpTime(((double)i)/100);
  		}
  		VisualizationUtil.createPlot(values).show();
  		
  		warp = new HarmonicTimeWarper(new ScaledIdentitiyTimeWarper(4,16));
  		double [] values2 = new double [1000];
  		for (int i =0; i< 1000; i++){
  			values2[i] = warp.warpTime(((double)i)/1000);
  		}
  		VisualizationUtil.createPlot(values2).show();
  	}
  	
  }
  /*
   * Copyright (C) 2010-2014 Andreas Maier 
   * CONRAD is developed as an Open Source project under the GNU General Public License (GPL).
  */