-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathgeometry.py
More file actions
29 lines (25 loc) · 950 Bytes
/
Copy pathgeometry.py
File metadata and controls
29 lines (25 loc) · 950 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
import numpy as np
# def quaternion_to_dcm(q):
# dcm = np.zeros([3,3])
# dcm[0,0] = q[0]**2 + q[1]**2 - q[2]**2 - q[3]**2
# dcm[0,1] = 2.0*(q[1]*q[2] - q[0]*q[3])
# dcm[0,2] = 2.0*(q[1]*q[3] + q[0]*q[2])
# dcm[1,0] = 2.0*(q[1]*q[2] + q[0]*q[3])
# dcm[1,1] = q[0]**2 - q[1]**2 + q[2]**2 - q[3]**2
# dcm[1,2] = 2.0*(q[2]*q[3] - q[0]*q[1])
# dcm[2,0] = 2.0*(q[1]*q[3] - q[0]*q[2])
# dcm[2,1] = 2.0*(q[2]*q[3] + q[0]*q[1])
# dcm[2,2] = q[0]**2 - q[1]**2 - q[2]**2 + q[3]**2
# return dcm
# Helper functions
def quaternion_to_rotation_matrix(q):
"""
Convert a quaternion into a rotation matrix.
"""
q0, q1, q2, q3 = q
R = np.array([
[1 - 2*(q2**2 + q3**2), 2*(q1*q2 - q0*q3), 2*(q1*q3 + q0*q2)],
[ 2*(q1*q2 + q0*q3), 1 - 2*(q1**2 + q3**2), 2*(q2*q3 - q0*q1)],
[ 2*(q1*q3 - q0*q2), 2*(q2*q3 + q0*q1), 1 - 2*(q1**2 + q2**2)]
])
return R