mailr26601 - /trunk/lib/geometry/vectors.py


Others Months | Index by Date | Thread Index
>>   [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Header


Content

Posted by edward on November 17, 2014 - 17:12:
Author: bugman
Date: Mon Nov 17 17:12:44 2014
New Revision: 26601

URL: http://svn.gna.org/viewcvs/relax?rev=26601&view=rev
Log:
Implemented the lib.geometry.vectors.vector_angle_atan2() function.

This is for calculating the inter-vector angle using the more numerically 
stable atan2() formula.


Modified:
    trunk/lib/geometry/vectors.py

Modified: trunk/lib/geometry/vectors.py
URL: 
http://svn.gna.org/viewcvs/relax/trunk/lib/geometry/vectors.py?rev=26601&r1=26600&r2=26601&view=diff
==============================================================================
--- trunk/lib/geometry/vectors.py       (original)
+++ trunk/lib/geometry/vectors.py       Mon Nov 17 17:12:44 2014
@@ -101,3 +101,26 @@
 
     # Return the signed angle.
     return angle
+
+
+def vector_angle_atan2(vector1, vector2):
+    """Calculate the angle between two N-dimensional vectors using the atan2 
formula.
+
+    The formula is::
+
+        angle = atan2(norm(cross(a, b)), dot(a, b)).
+
+
+    This is more numerically stable for angles close to 0 or pi than the 
acos() formula.
+
+
+    @param vector1:     The first vector.
+    @type vector1:      numpy rank-1 array
+    @param vector2:     The second vector.
+    @type vector2:      numpy rank-1 array
+    @return:            The angle between 0 and pi.
+    @rtype:             float
+    """
+
+    # Calculate and return the angle.
+    return atan2(norm(cross(vector1, vector2)), dot(vector1, vector2))




Related Messages


Powered by MHonArc, Updated Mon Nov 17 17:20:02 2014