Source code for mrmath
# -*- coding: utf-8 -*-
"""Mathematische funktionen.
.. moduleauthor:: Michael Rippstein <info@anatas.ch>
"""
from math import fabs
from typing import Tuple
from ._const import ARCS, DEG, RAD
from ._hyperbol import coth
from ._numtheor import frac, iseven, isodd, modulo
__all__ = ['coth', 'RAD', 'DEG', 'ARCS', 'iseven', 'isodd', 'frac', 'modulo', 'ddd', 'dms']
[docs]def ddd(deg: int, min_: int, sec: float) -> float:
"""Umrechnung eines in Grad, bogenminuten und bogensekunden gegebenen winkels in dezimale darstellung.
Parameters
----------
deg
winkelgrad
min
bogenminuten
sec
bogensekunden
Returns
-------
float
winkel in dezimaler darstellung
Examples
--------
.. testsetup:: ddd
from mrmath import ddd
.. doctest:: ddd
>>> round(ddd(15, 30, 0.0), 1)
15.5
>>> round(ddd(-8, 9, 10.0), 5)
-8.15278
>>> round(ddd(0, 1, 0.0), 5)
0.01667
>>> round(ddd(0, -5, 0.0), 5)
-0.08333
"""
if deg < 0 or min_ < 0 or sec < 0:
sign = -1.0
else:
sign = 1.0
return sign * (abs(deg) + abs(min_) / 60.0 + abs(sec) / 3600.0)
[docs]def dms(angle: float) -> Tuple[int, int, float]:
"""Ermittelt Grad, Bogenminuten und Bogensekunden zu gegebenem Winkel.
Parameters
----------
dd
Winkel in Grad in dezimaler Darstellung
Returns
-------
D : int
Winkelgrade
M : int
Bogenminuten
S : float
Bogensekunden
Examples
--------
.. testsetup:: dms
from mrmath import dms
.. doctest:: dms
>>> dms(0.5)
(0, 30, 0.0)
>>> dms(-0.5)
(0, -30, 0.0)
"""
x = fabs(angle)
deg = int(x)
x = (x - deg) * 60.0
min_ = int(x)
sec = (x - min_) * 60.0
if angle < 0.0:
if deg != 0:
deg *= -1
else:
if min_ != 0:
min_ *= -1
else:
sec *= -1.0
return deg, min_, sec