vector¶
Routines for working with vectors These routines can be used with vectors, as well as with matrices containing a vector in each row.
Functions¶
vector.angle()
... Angle between two vectorsvector.GramSchmidt()
... Gram-Schmidt orthogonalization of three pointsvector.normalize()
... Normalization of a vectorvector.project()
... Projection of one vector onto anothervector.plane_orientation()
... Orientation of plane defined by three pointsvector.qrotate()
... Quaternion indicating the shortest rotation from one vector into another.vector.rotate_vector()
... Rotation of a vector
Details¶
Routines for working with vectors These routines can be used with vectors, as well as with matrices containing a vector in each row.
-
vector.
GramSchmidt
(p1, p2, p3)[source]¶ Gram-Schmidt orthogonalization
Parameters: - p1 (array (3,) or (M,3)) – coordinates of Point 1
- p2 (array (3,) or (M,3)) – coordinates of Point 2
- p3 (array (3,) or (M,3)) – coordinates of Point 3
Returns: Rmat – flattened rotation matrix
Return type: array (9,) or (M,9)
Example
>>> P1 = np.array([[0, 0, 0], [1,2,3]]) >>> P2 = np.array([[1, 0, 0], [4,1,0]]) >>> P3 = np.array([[1, 1, 0], [9,-1,1]]) >>> GramSchmidt(P1,P2,P3) array([[ 1. , 0. , 0. , 0. , 1. , 0. , 0. , 0. , 1. ], [ 0.6882472 , -0.22941573, -0.6882472 , 0.62872867, -0.28470732, 0.72363112, -0.36196138, -0.93075784, -0.05170877]])
Notes
The flattened rotation matrix corresponds to
\[\mathbf{R} = [ \vec{e}_1 \, \vec{e}_2 \, \vec{e}_3 ]\]
-
vector.
angle
(v1, v2)[source]¶ Angle between two vectors
Parameters: - v1 (array (N,) or (M,N)) – vector 1
- v2 (array (N,) or (M,N)) – vector 2
Returns: angle – angle between v1 and v2
Return type: double or array(M,)
Example
>>> v1 = np.array([[1,2,3], >>> [4,5,6]]) >>> v2 = np.array([[1,0,0], >>> [0,1,0]]) >>> thLib.vector.angle(v1,v2) array([ 1.30024656, 0.96453036])
Notes
\[\alpha =arccos(\frac{\vec{v_1} \cdot \vec{v_2}}{| \vec{v_1} | \cdot | \vec{v_2}|})\]
-
vector.
normalize
(v)[source]¶ Normalization of a given vector
Parameters: v (array (N,) or (M,N)) – input vector Returns: v_normalized – normalized input vector Return type: array (N,) or (M,N) Example
>>> thLib.vector.normalize([3, 0, 0]) array([[ 1., 0., 0.]])
>>> v = [[pi, 2, 3], [2, 0, 0]] >>> thLib.vector.normalize(v) array([[ 0.6569322 , 0.41821602, 0.62732404], [ 1. , 0. , 0. ]])
Notes
\[\vec{n} = \frac{\vec{v}}{|\vec{v}|}\]
-
vector.
plane_orientation
(p1, p2, p3)[source]¶ The vector perpendicular to the plane defined by three points.
Parameters: - p1 (array (3,) or (M,3)) – coordinates of Point 1
- p2 (array (3,) or (M,3)) – coordinates of Point 2
- p3 (array (3,) or (M,3)) – coordinates of Point 3
Returns: n – vector perpendicular to the plane
Return type: array (3,) or (M,3)
Example
>>> P1 = np.array([[0, 0, 0], [1,2,3]]) >>> P2 = np.array([[1, 0, 0], [4,1,0]]) >>> P3 = np.array([[1, 1, 0], [9,-1,1]]) >>> plane_orientation(P1,P2,P3) array([[ 0. , 0. , 1. ], [-0.36196138, -0.93075784, -0.05170877]])
Notes
\[\vec{n} = \frac{ \vec{a} \times \vec{b}} {| \vec{a} \times \vec{b}|}\]
-
vector.
project
(v1, v2)[source]¶ Project one vector onto another
Parameters: - v1 (array (N,) or (M,N)) – projected vector
- v2 (array (N,) or (M,N)) – target vector
Returns: v_projected – projection of v1 onto v2
Return type: array (N,) or (M,N)
Example
>>> v1 = np.array([[1,2,3], >>> [4,5,6]]) >>> v2 = np.array([[1,0,0], >>> [0,1,0]]) >>> thLib.vector.project(v1,v2) array([[ 1., 0., 0.], [ 0., 5., 0.]])
Notes
\[ \begin{align}\begin{aligned}\vec{n} = \frac{ \vec{a} }{| \vec{a} |}\\\vec{v}_{proj} = \vec{n} (\vec{v} \cdot \vec{n})\end{aligned}\end{align} \]
-
vector.
qrotate
(v1, v2)[source]¶ Quaternion indicating the shortest rotation from one vector into another. You can read “qrotate” as either “quaternion rotate” or as “quick rotate”.
Parameters: - v1 (ndarray (3,)) – first vector
- v2 (ndarray (3,)) – second vector
Returns: q – quaternion rotating v1 into v2
Return type: ndarray (3,)
Example
>>> v1 = np.r_[1,0,0] >>> v2 = np.r_[1,1,0] >>> q = qrotate(v1, v2) >>> print(q) [ 0. 0. 0.38268343]
-
vector.
rotate_vector
(vector, q)[source]¶ Rotates a vector, according to the given quaternions. Note that a single vector can be rotated into many orientations; or a row of vectors can all be rotated by a single quaternion.
Parameters: - vector (array, shape (3,) or (N,3)) – vector(s) to be rotated.
- q (array_like, shape ([3,4],) or (N,[3,4])) – quaternions or quaternion vectors.
Returns: rotated – rotated vector(s)
Return type: array, shape (3,) or (N,3)
Notes
\[q \circ \left( {\vec x \cdot \vec I} \right) \circ {q^{ - 1}} = \left( {{\bf{R}} \cdot \vec x} \right) \cdot \vec I\]More info under http://en.wikipedia.org/wiki/Quaternion
Examples
>>> mymat = eye(3) >>> myVector = r_[1,0,0] >>> quats = array([[0,0, sin(0.1)],[0, sin(0.2), 0]]) >>> quat.rotate_vector(myVector, quats) array([[ 0.98006658, 0.19866933, 0. ], [ 0.92106099, 0. , -0.38941834]])
>>> quat.rotate_vector(mymat, [0, 0, sin(0.1)]) array([[ 0.98006658, 0.19866933, 0. ], [-0.19866933, 0.98006658, 0. ], [ 0. , 0. , 1. ]])