Print

Print


Commit in GeomConverter/src/org/lcsim/detector on MAIN
CoordinateTransformation3D.java+42-141.3 -> 1.4
IRotation3D.java+2-21.2 -> 1.3
ICoordinateTransformation3D.java+10-51.1 -> 1.2
Rotation3D.java+4-51.6 -> 1.7
+58-26
4 modified files
Changed multiplication interfaces for Rotation3D
Fixed bugs transforming in place
Fixed bugs in multiplication introduced by use of VecOp matrix multiplication
Code is reasonably well tested at this point

GeomConverter/src/org/lcsim/detector
CoordinateTransformation3D.java 1.3 -> 1.4
diff -u -r1.3 -r1.4
--- CoordinateTransformation3D.java	27 Feb 2007 19:29:32 -0000	1.3
+++ CoordinateTransformation3D.java	28 Feb 2007 21:37:28 -0000	1.4
@@ -59,25 +59,49 @@
         return _rotation;
     }
     
-    // Transformations
-    public Hep3Vector transform(Hep3Vector coordinates)
+    // Transformations in place
+    public void transform(Hep3Vector coordinates)
     {
+//        System.out.println("Input coordinates: "+coordinates);
+//        System.out.println("Translation: "+_translation);
         translate(coordinates);
+//        System.out.println("Translated coordinates: "+coordinates);
+        
+//        System.out.println("Rotation: "+_rotation);
         rotate(coordinates);
-        return coordinates;
+//        System.out.println("Rotated coordinates: "+coordinates);
+        
+//        return coordinates;
     }
     
-    public Hep3Vector translate(Hep3Vector coordinates)
+    public void translate(Hep3Vector coordinates)
     {
-        return VecOp.add(coordinates,_translation);
+        Hep3Vector new_coordinates = VecOp.add(coordinates,_translation);
+        ((BasicHep3Vector)coordinates).setV(new_coordinates.x(),new_coordinates.y(),new_coordinates.z());
     }
     
-    public Hep3Vector rotate(Hep3Vector coordinates)
+    public void rotate(Hep3Vector coordinates)
     {
-        //return VecOp.mult(_rotation,coordinates);
-    	return VecOp.mult(_rotation.getRotationMatrix(),coordinates);
+        Hep3Vector new_coordinates = VecOp.mult(_rotation.getRotationMatrix(),coordinates);
+        ((BasicHep3Vector)coordinates).setV(new_coordinates.x(),new_coordinates.y(),new_coordinates.z());
     }
      
+    // Return transformed vectors
+    public Hep3Vector transformed(Hep3Vector coordinates)
+    {    
+        return rotated(translated(coordinates));
+    }
+    
+    public Hep3Vector translated(Hep3Vector coordinates)
+    {
+        return VecOp.add(coordinates,_translation);
+    }
+    
+    public Hep3Vector rotated(Hep3Vector coordinates)
+    {
+        return VecOp.mult(_rotation.getRotationMatrix(),coordinates);
+    }
+    
     // Invert the transformation
     public void invert()
     {
@@ -94,17 +118,21 @@
     }
     
     // Static functions
-    public static CoordinateTransformation3D mult(CoordinateTransformation3D transformation1, CoordinateTransformation3D transformation2)
+    public static CoordinateTransformation3D multiply(CoordinateTransformation3D transformation1, CoordinateTransformation3D transformation2)
     {
-        Rotation3D rotation = new Rotation3D(VecOp.mult(transformation1.getRotation().getRotationMatrix(),transformation2.getRotation().getRotationMatrix()));
-        Hep3Vector translation = VecOp.add(VecOp.mult(transformation1.getRotation().getRotationMatrix(),transformation2.getTranslation()),transformation1.getTranslation());
+        Rotation3D rotation = Rotation3D.multiply(transformation1.getRotation(),transformation2.getRotation());
+        Hep3Vector translation = VecOp.add(
+                VecOp.mult(transformation2.getRotation().inverse().getRotationMatrix(),transformation1.getTranslation()),
+                transformation2.getTranslation());
         return new CoordinateTransformation3D(translation,rotation);
     }
     
     // multiply in place
-    public void mult(ICoordinateTransformation3D transformation)
+    public void multiplyBy(ICoordinateTransformation3D transformation)
     {
-    	_rotation.setRotationMatrix(VecOp.mult(_rotation.getRotationMatrix(), transformation.getRotation().getRotationMatrix()));
-    	_translation = VecOp.add(_translation, transformation.getTranslation());
+        _rotation.multiplyBy(transformation.getRotation());
+        _translation = VecOp.add(
+                VecOp.mult(transformation.getRotation().inverse().getRotationMatrix(),_translation),
+                transformation.getTranslation());
     }
 }

GeomConverter/src/org/lcsim/detector
IRotation3D.java 1.2 -> 1.3
diff -u -r1.2 -r1.3
--- IRotation3D.java	27 Feb 2007 01:08:20 -0000	1.2
+++ IRotation3D.java	28 Feb 2007 21:37:28 -0000	1.3
@@ -16,7 +16,7 @@
  * 
  * @author Tim Nelson <[log in to unmask]>
  * @author Jeremy McCormick <[log in to unmask]>
- * @version $Id: IRotation3D.java,v 1.2 2007/02/27 01:08:20 jeremy Exp $
+ * @version $Id: IRotation3D.java,v 1.3 2007/02/28 21:37:28 tknelson Exp $
  */
 interface IRotation3D
 {   
@@ -94,7 +94,7 @@
      * modifying this IRotation3D in place.
      * @param rotation
      */
-    public void multiply(IRotation3D rotation);
+    public void multiplyBy(IRotation3D rotation);
     
     /**
      * Compare this IRotation3D with another.     

GeomConverter/src/org/lcsim/detector
ICoordinateTransformation3D.java 1.1 -> 1.2
diff -u -r1.1 -r1.2
--- ICoordinateTransformation3D.java	26 Feb 2007 19:25:19 -0000	1.1
+++ ICoordinateTransformation3D.java	28 Feb 2007 21:37:28 -0000	1.2
@@ -16,12 +16,17 @@
     public Hep3Vector getTranslation();
     public Rotation3D getRotation();
     
-    // Transformations
-    public Hep3Vector transform(Hep3Vector coordinates);
-    public Hep3Vector translate(Hep3Vector coordinates);    
-    public Hep3Vector rotate(Hep3Vector coordinates);    
+    // Transformations in place
+    public void transform(Hep3Vector coordinates);
+    public void translate(Hep3Vector coordinates);    
+    public void rotate(Hep3Vector coordinates);    
     
-    public void mult(ICoordinateTransformation3D trans);
+    // Transformations creating new position vectors
+    public Hep3Vector transformed(Hep3Vector coordinates);
+    public Hep3Vector translated(Hep3Vector coordinates);    
+    public Hep3Vector rotated(Hep3Vector coordinates);    
+    
+    public void multiplyBy(ICoordinateTransformation3D trans);
     
     public void invert();
 }
\ No newline at end of file

GeomConverter/src/org/lcsim/detector
Rotation3D.java 1.6 -> 1.7
diff -u -r1.6 -r1.7
--- Rotation3D.java	27 Feb 2007 01:08:20 -0000	1.6
+++ Rotation3D.java	28 Feb 2007 21:37:29 -0000	1.7
@@ -12,7 +12,7 @@
  * 
  * @author Tim Nelson <[log in to unmask]>
  * @author Jeremy McCormick <[log in to unmask]>
- * @version $Id: Rotation3D.java,v 1.6 2007/02/27 01:08:20 jeremy Exp $
+ * @version $Id: Rotation3D.java,v 1.7 2007/02/28 21:37:29 tknelson Exp $
  */
 public class Rotation3D implements IRotation3D
 {
@@ -106,7 +106,7 @@
 	public IRotation3D inverse()
 	{
 		BasicHep3Matrix inversematrix = new BasicHep3Matrix(matrix);
-		inversematrix.invert();
+		inversematrix.transpose();
 		return new Rotation3D(inversematrix);
 	}
 
@@ -406,10 +406,9 @@
 		}
 	}
 	
-	public void multiply(IRotation3D rotation)
+	public void multiplyBy(IRotation3D rotation)
 	{
-		this.setRotationMatrix(
-				Rotation3D.mult(rotation.getRotationMatrix(), this.getRotationMatrix()));
+		this.setRotationMatrix(Rotation3D.mult(this.getRotationMatrix(), rotation.getRotationMatrix()));
 	}
 	
 	public static Rotation3D multiply(IRotation3D rot1, IRotation3D rot2)
CVSspam 0.2.8