Source code for g3d.mesh.tools.generic

"""generic geometrical operations"""
import os
from typing import Any, Tuple, Union

if os.environ.get('__USE_CUDA', '0') == '1':
    import cupy as np
    from cupy import ndarray
else:
    import numpy as np
    from numpy import ndarray

from g3d.defs import AngleType


[docs] def rotate(origin: Union[ndarray, list[float], float], point: Union[ndarray, list[float], float], angle: Union[ndarray, list[float], float]) \ -> Union[Tuple[ndarray, ndarray], Tuple[list[float], list[float]], Tuple[float, float]]: """ :param origin: :param point: :param angle: :return: """ ox, oy = origin px, py = point qx = ox + np.cos(angle) * (px - ox) + np.sin(angle) * (py - oy) qy = oy - np.sin(angle) * (px - ox) + np.cos(angle) * (py - oy) return qx, qy
[docs] def convert_angle(a: float, b: float, **kwargs: Any) -> Union[float, None]: """ :param a: :param b: :param kwargs: :return: """ ialt = AngleType.IALT_1 dim = AngleType.DEGREES for key, value in kwargs.items(): if key == 'ialt': ialt = value if key == 'angle_dim': dim = value if dim == AngleType.DEGREES: if ialt == AngleType.IALT_1 or ialt == AngleType.IALT_2 or ialt == AngleType.IALT_3: if b > 90.: return 360. - a else: return a else: if ialt == AngleType.IALT_1 or ialt == AngleType.IALT_2 or ialt == AngleType.IALT_3: if b > 0.5 * np.pi: return 2. * np.pi - a else: return a return None