Výpočet trigonometrických funkcií v jazyku Python (sin, cos, tan, arcsin, arccos, arctan)

obchodné

Pomocou math, štandardného modulu jazyka Python pre matematické funkcie, môžete vypočítať trigonometrické funkcie (sin, cos, tan) a inverzné trigonometrické funkcie (arcsin, arccos, arctan).

Nasledujúci obsah je vysvetlený pomocou vzorových kódov.

  • Pí (3,1415926..):math.pi
  • Prevod uhlov (radiány, stupne):math.degrees(),math.radians()
  • Sínus, inverzný sínus:math.sin(),math.asin()
  • kosínus, inverzný kosínus:math.cos(),math.acos()
  • Tangens, Inverzný tangens:math.tan(),math.atan(),math.atan2()
  • Nižšie uvedené rozdiely:math.atan(),math.atan2()

Pí (3,1415926..): math.pi

Pí je v matematickom module uvedené ako konštanta. Vyjadruje sa takto.
math.pi

import math

print(math.pi)
# 3.141592653589793

Prevod uhlov (radiány, stupne): math.degrees(), math.radians()

Trigonometrické a inverzné trigonometrické funkcie v matematickom module používajú ako jednotku uhla radián.

Na prevod medzi radiánmi (metóda oblúkových stupňov) a stupňami (metóda stupňov) použite math.degrees() a math.radians().

Math.degrees() konvertuje z radiánov na stupne a math.radians() konvertuje zo stupňov na radiány.

print(math.degrees(math.pi))
# 180.0

print(math.radians(180))
# 3.141592653589793

Sínus, inverzný sínus: math.sin(), math.asin()

Funkcia na zistenie sínusu (sin) je math.sin() a funkcia na zistenie inverzného sínusu (arcsin) je math.asin().

Tu je príklad na zistenie sínusu 30 stupňov pomocou funkcie math.radians() na prevod stupňov na radiány.

sin30 = math.sin(math.radians(30))
print(sin30)
# 0.49999999999999994

Sínus 30 stupňov je 0,5, ale je tu chyba, pretože pí, iracionálne číslo, sa nedá presne vypočítať.

Ak chcete zaokrúhliť na príslušný počet číslic, použite funkciu round() alebo metódu format() alebo funkciu format().

Všimnite si, že návratová hodnota funkcie round() je číslo (int alebo float), ale návratová hodnota funkcie format() je reťazec. Ak ho chcete použiť na ďalšie výpočty, použite funkciu round().

print(round(sin30, 3))
print(type(round(sin30, 3)))
# 0.5
# <class 'float'>

print('{:.3}'.format(sin30))
print(type('{:.3}'.format(sin30)))
# 0.5
# <class 'str'>

print(format(sin30, '.3'))
print(type(format(sin30, '.3')))
# 0.5
# <class 'str'>

Funkcia round() uvádza ako druhý argument počet desatinných miest. Všimnite si, že nejde o presné zaokrúhľovanie. Podrobnosti nájdete v nasledujúcom článku.

Metóda format() a funkcia format() určujú počet desatinných miest v reťazci špecifikácie formátovania. Podrobnosti nájdete v nasledujúcom článku.

Ak chcete porovnávať, môžete použiť aj math.isclose().

print(math.isclose(sin30, 0.5))
# True

Podobne je tu príklad na nájdenie inverzného sínusu 0,5. Math.asin() vráti radiány, ktoré sa prevedú na stupne pomocou math.degrees().

asin05 = math.degrees(math.asin(0.5))
print(asin05)
# 29.999999999999996

print(round(asin05, 3))
# 30.0

kosínus, inverzný kosínus: math.cos(), math.acos()

Funkcia na zistenie kosínusu (cos) je math.cos() a funkcia na zistenie inverzného kosínusu (oblúkový kosínus, arccos) je math.acos().

Tu je príklad nájdenia kosínusu 60 stupňov a inverzného kosínusu 0,5.

print(math.cos(math.radians(60)))
# 0.5000000000000001

print(math.degrees(math.acos(0.5)))
# 59.99999999999999

Ak chcete zaokrúhliť na príslušnú číslicu, môžete použiť round() alebo format() ako pri sínuse.

Tangens, Inverzný tangens: math.tan(), math.atan(), math.atan2()

Funkcia na nájdenie dotyčnice (tan) je math.tan() a funkcia na nájdenie inverznej dotyčnice (arctan) je math.atan() alebo math.atan2().
Math.atan2() je popísaná neskôr.

Príklad nájdenia dotyčnice 45 stupňov a inverznej dotyčnice 1 stupňa je uvedený nižšie.

print(math.tan(math.radians(45)))
# 0.9999999999999999

print(math.degrees(math.atan(1)))
# 45.0

Rozdiel medzi math.atan() a math.atan2()

Math.atan() aj math.atan2() sú funkcie, ktoré vracajú inverzný tangens, ale líšia sa počtom argumentov a rozsahom návratových hodnôt.

Math.atan(x) má jeden argument a vracia arctan(x) v radiánoch. Vrátená hodnota bude medzi -pi \ 2 a pi \ 2 (-90 až 90 stupňov).

print(math.degrees(math.atan(0)))
# 0.0

print(math.degrees(math.atan(1)))
# 45.0

print(math.degrees(math.atan(-1)))
# -45.0

print(math.degrees(math.atan(math.inf)))
# 90.0

print(math.degrees(math.atan(-math.inf)))
# -90.0

V uvedenom príklade predstavuje math.inf nekonečno.

Math.atan2(y, x) má dva argumenty a vráti arctan(y \ x) v radiánoch. Tento uhol je uhol (deklinácia), ktorý zviera vektor od počiatku k súradniciam (x, y) s kladným smerom osi x v polárnej súradnicovej rovine, a vrátená hodnota je medzi -pi a pi (-180 až 180 stupňov).

Keďže sa dajú správne získať aj uhly v druhom a treťom kvadrante, math.atan2() je pri uvažovaní polárnej súradnicovej roviny vhodnejšia ako math.atan().

Všimnite si, že poradie argumentov je y, x, nie x, y.

print(math.degrees(math.atan2(0, 1)))
# 0.0

print(math.degrees(math.atan2(1, 1)))
# 45.0

print(math.degrees(math.atan2(1, 0)))
# 90.0

print(math.degrees(math.atan2(1, -1)))
# 135.0

print(math.degrees(math.atan2(0, -1)))
# 180.0

print(math.degrees(math.atan2(-1, -1)))
# -135.0

print(math.degrees(math.atan2(-1, 0)))
# -90.0

print(math.degrees(math.atan2(-1, 1)))
# -45.0

Podobne ako v predchádzajúcom príklade, záporný smer osi x (y je nula a x je záporné) je pi (180 stupňov), ale keď je y záporná nula, je to -pi (-180 stupňov). Buďte opatrní, ak chcete striktne narábať so znamienkom.

print(math.degrees(math.atan2(-0.0, -1)))
# -180.0

Záporné nuly sú výsledkom týchto operácií

print(-1 / math.inf)
# -0.0

print(-1.0 * 0.0)
# -0.0

Celé čísla sa nepovažujú za záporné nuly.

print(-0.0)
# -0.0

print(-0)
# 0

Aj keď sú x aj y nulové, výsledok závisí od znamienka.

print(math.degrees(math.atan2(0.0, 0.0)))
# 0.0

print(math.degrees(math.atan2(-0.0, 0.0)))
# -0.0

print(math.degrees(math.atan2(-0.0, -0.0)))
# -180.0

print(math.degrees(math.atan2(0.0, -0.0)))
# 180.0

Existujú aj ďalšie príklady, kde sa znamienko výsledku mení v závislosti od záporných núl, napríklad math.atan2(), ako aj math.sin(), math.asin(), math.tan() a math.atan().

print(math.sin(0.0))
# 0.0

print(math.sin(-0.0))
# -0.0

print(math.asin(0.0))
# 0.0

print(math.asin(-0.0))
# -0.0

print(math.tan(0.0))
# 0.0

print(math.tan(-0.0))
# -0.0

print(math.atan(0.0))
# 0.0

print(math.atan(-0.0))
# -0.0

print(math.atan2(0.0, 1.0))
# 0.0

print(math.atan2(-0.0, 1.0))
# -0.0

Všimnite si, že doteraz uvedené príklady sú výsledkom spustenia programu v CPythone. Upozorňujeme, že iné implementácie alebo prostredia môžu záporné nuly spracúvať odlišne.

Copied title and URL