projects/lcsim/trunk/math/src/main/java/org/lcsim/spacegeom
--- projects/lcsim/trunk/math/src/main/java/org/lcsim/spacegeom/SpacePoint.java 2014-02-11 01:53:50 UTC (rev 2975)
+++ projects/lcsim/trunk/math/src/main/java/org/lcsim/spacegeom/SpacePoint.java 2014-02-11 22:37:32 UTC (rev 2976)
@@ -7,6 +7,8 @@
import hep.physics.vec.Hep3Vector;
import java.io.Serializable;
+import static java.lang.Math.acos;
+import static java.lang.Math.sqrt;
/**
* A SpacePoint represents a concrete point in 3D Space,
@@ -376,6 +378,24 @@
return Math.sqrt( dx*dx + dy*dy + dz*dz );
}
+ /**
+ * Return the opening angle between two space points, assuming the point of reference is the origin
+ * @param spt1 SpacePoint 1
+ * @param spt2 SpacePoint 2
+ * @return opening angle between points
+ */
+ public static double openingAngle(SpacePoint p1, SpacePoint p2)
+ {
+ // should check on point being non-zero...
+ //recall that cos(theta) = a . b / |a|*|b|
+ double dot = p1.x()*p2.x()+p1.y()*p2.y()+p1.z()*p2.z();
+
+ double d1 = sqrt(p1.x()*p1.x()+p1.y()*p1.y()+p1.z()*p1.z());
+ double d2 = sqrt(p2.x()*p2.x()+p2.y()*p2.y()+p2.z()*p2.z());
+
+ return acos(dot/(d1*d2));
+ }
+
/**
*Clone
*