content: package edu.stanford.rsl.conrad.geometry.motion;
  
  import edu.stanford.rsl.conrad.geometry.shapes.simple.PointND;
  import edu.stanford.rsl.conrad.geometry.transforms.Transform;
  import edu.stanford.rsl.conrad.geometry.transforms.Translation;
  import edu.stanford.rsl.conrad.numerics.SimpleVector;
  
  public class MovingCenterRotationMotionField extends RotationMotionField {
  
  	/**
  	 * 
  	 */
  	private static final long serialVersionUID = -4231093664698586329L;
  	protected MotionField centerTransform;
  	
  	public MovingCenterRotationMotionField (PointND transformationCenter, MotionField centerTransform, SimpleVector rotationAxis, double angle){
  		super(transformationCenter, rotationAxis, angle);
  		this.centerTransform = centerTransform; 
  	}	
  	
  	@Override
  	public PointND getPosition(PointND initialPosition, double initialTime, double time) {
  		back = new Translation(centerTransform.getPosition(center, initialTime, time).getAbstractVector());
  		SimpleVector translateToInitialTime = centerTransform.getPosition(center, 0, initialTime).getAbstractVector();
  		translateToInitialTime.negate();
  		toCenter = new Translation(translateToInitialTime);
  		Transform scaleRotation = getTransform(initialTime, time);
  		PointND p = back.transform(scaleRotation.transform(toCenter.transform(initialPosition)));
  		return p;
  	}
  
  }
  /*
   * Copyright (C) 2010-2014 Andreas Maier 
   * CONRAD is developed as an Open Source project under the GNU General Public License (GPL).
  */