def basis(a):
'''Returns two vectors u and v such that (a, u, v) is a direct ON basis.
'''
ez = np.array([0., 0., 1.], dtype = np.float64)
if np.abs(np.dot(a, ez)) == 1.:
u = np.dot(a, ez) * np.array([1., 0., 0.], dtype = np.float64)
v = np.array([0., 1., 0.], dtype = np.float64)
return u,v
else:
theta = np.arccos(np.dot(a, ez))
u = ez/np.sin(theta) - a/np.tan(theta)
v = np.cross(a, u)
u = u/np.linalg.norm(u)
v = v/np.linalg.norm(v)
return u, v
评论列表
文章目录