Source code for vista.transforms.transforms
"""General transform support functions"""
import numpy as np
from numpy.typing import NDArray
from typing import Tuple
[docs]
def spherical_to_cartesian(azimuth: Tuple[float, NDArray], elevation: Tuple[float, NDArray]) -> NDArray:
"""Convert spherical angle(s) to Cartesian vector(s)
Parameters
----------
azimuth : Tuple[float, NDArray]
Angle(s) in radians in the x-y plane
elevation : Tuple[float, NDArray]
Angle(s) in radians coming off the x-y plane toward the z-axis
Returns
-------
NDArray
Cartesian unit-vector(s) pointing in the direction of the given anglees
"""
cos_elevation = np.cos(elevation)
return np.array([
cos_elevation * np.cos(azimuth),
cos_elevation * np.sin(azimuth),
np.sin(elevation),
]).squeeze()
[docs]
def cartesian_to_spherical(unit_vector) -> Tuple[NDArray, NDArray]:
"""Convert Cartesian vector(s) to spherical angle(s)
Parameters
----------
unit_vector : NDArray
Unit vector or vector (as array of column vectors)
Returns
-------
NDArray
Angle(s) in radians in the x-y plane
NDArray
Angle(s) in radians coming off the x-y plane toward the z-axis
"""
x = unit_vector[0]
y = unit_vector[1]
z = unit_vector[2]
return np.arctan2(y, x), np.arctan2(z, np.sqrt(x**2 + y**2))