1 package org.lcsim.spacegeom; 2 /** Abstract interface for a class that transforms a SpacePoint 3 * or SpacePointVector. 4 * 5 * Transformation may be invoked with xf.apply(spt) or xf(spt). 6 * Inverse may be applied with xf.inverse()(spt) or xf.invert(spt). 7 * In all cases the original value is unchanged and the transformed 8 * value is returned. 9 * 10 *@author Norman A. Graf 11 *@version $Id: SpaceXform.java,v 1.1.1.1 2010/12/01 00:15:57 jeremy Exp $ 12 */ 13 14 public abstract class SpaceXform 15 { 16 17 // methods to be implemented in subclass 18 19 /** Return the inverse of this transformation. 20 * The subclass manages its inverse--the inverse transformation 21 * should be destroyed when and only when the original is destroyed. 22 * @return the inverse of this transformation 23 */ 24 public abstract SpaceXform inverse(); 25 26 /** Transform a space point. 27 * @param spt SpacePoint on which to apply this transform 28 * @return SpacePoint on which this transform has been applied 29 */ 30 public abstract SpacePoint apply( SpacePoint spt ); 31 32 /** Transform a space point vector. 33 * @param svec SpacePointVector on which to apply this transform 34 * @return SpacePointVector on which this transform has been applied 35 */ 36 public abstract SpacePointVector apply( SpacePointVector svec ); 37 38 // methods implemented here 39 40 /** Transform a space point. 41 * @param spt SpacePoint to transform 42 * @return transformed SpacePoint 43 */ 44 public SpacePoint transform( SpacePoint spt ) 45 { 46 return apply(spt); 47 } 48 49 /** Transform a space point vector. 50 * @param svec SpacePointVector to transform 51 * @return ransformed SpacePointVector 52 */ 53 public SpacePointVector transform( SpacePointVector svec ) 54 { 55 return apply(svec); 56 } 57 58 /** Transform a space point with inverse transformation. 59 */ 60 SpacePoint invert( SpacePoint spt ) 61 { 62 return inverse().apply(spt); 63 } 64 65 /** Transform a space point vector with inverse transformation. 66 */ 67 SpacePoint invert( SpacePointVector svec) 68 { 69 return inverse().apply(svec).getStartPoint(); 70 } 71 72 }