View Javadoc

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  }