Source code for skysegmentor.maths

import numpy as np


[docs] def vector_norm(a: np.ndarray) -> float: """Returns the magnitude a vector. Parameters ---------- a : array Vector a. """ a1, a2, a3 = a[0], a[1], a[2] return np.sqrt(a1**2.0 + a2**2.0 + a3**2.0)
[docs] def vector_dot(a: np.ndarray, b: np.ndarray) -> float: """Returns the vector dot product. Parameters ---------- a : array Vector a. b : array Vector b. """ a1, a2, a3 = a[0], a[1], a[2] b1, b2, b3 = b[0], b[1], b[2] return a1 * b1 + a2 * b2 + a3 * b3
[docs] def vector_cross(a: np.ndarray, b: np.ndarray) -> np.ndarray: """Returns the vector cross product. Parameters ---------- a : array Vector a. b : array Vector b. Returns ------- s : array Cross product vector. """ a1, a2, a3 = a[0], a[1], a[2] b1, b2, b3 = b[0], b[1], b[2] s1 = a2 * b3 - a3 * b2 s2 = a3 * b1 - a1 * b3 s3 = a1 * b2 - a2 * b1 s = np.array([s1, s2, s3]) return s
[docs] def matrix_dot_3by3(mat1: np.ndarray, mat2: np.ndarray) -> np.ndarray: """Dot product of 2 3x3 matrices. Parameters ---------- mat1, mat2 : array Flattened 3by3 matrices. Returns ------- mat3 : array Matrix dot product output. """ mat3 = np.array( [ mat1[0] * mat2[0] + mat1[1] * mat2[3] + mat1[2] * mat2[6], mat1[0] * mat2[1] + mat1[1] * mat2[4] + mat1[2] * mat2[7], mat1[0] * mat2[2] + mat1[1] * mat2[5] + mat1[2] * mat2[8], mat1[3] * mat2[0] + mat1[4] * mat2[3] + mat1[5] * mat2[6], mat1[3] * mat2[1] + mat1[4] * mat2[4] + mat1[5] * mat2[7], mat1[3] * mat2[2] + mat1[4] * mat2[5] + mat1[5] * mat2[8], mat1[6] * mat2[0] + mat1[7] * mat2[3] + mat1[8] * mat2[6], mat1[6] * mat2[1] + mat1[7] * mat2[4] + mat1[8] * mat2[7], mat1[6] * mat2[2] + mat1[7] * mat2[5] + mat1[8] * mat2[8], ] ) return mat3