Atan2

Funkce atan2(yx) vrací úhel θ svíraný polohovým vektorem (průvodičem) bodu (xy) a kladnou poloosou osy x upravený do intervalu (-π, π⟩
Určení kvadrantu pro funkci atan2(y, x) argumentu y/x

atan2 (někde arctg2) je funkce dostupná v mnoha programovacích jazycích, numerických knihovnách a nástrojích pro výpočty, kterou lze použít místo funkce arkus tangens a která významně usnadňuje převod z pravoúhlých souřadnic na polární a podobné úlohy. Funkce je definovaná pro všechny reálné hodnoty dvou parametrů, a v případech, kdy je výraz na pravé straně definován, platí

a t a n 2 ( y , x ) = arctg y x {\displaystyle atan2(y,x)=\operatorname {arctg} {\frac {y}{x}}}

Účel

Funkce atan2 řeší dva problémy, ke kterým by došlo při použití výrazu arctg y x {\displaystyle \operatorname {arctg} {\frac {y}{x}}} :

  • Pokud je x nulové nebo velmi malé, při výpočtu y/x může dojít k chybě dělení nulou nebo přetečení; hodnota funkce atan2 je však + π 2 {\displaystyle +{\frac {\pi }{2}}} nebo π 2 {\displaystyle -{\frac {\pi }{2}}} .
  • Při převodu na polární souřadnice potřebujeme úhel v rozsahu celého kruhu, tj. 2 π {\displaystyle 2\pi } nebo 360°, zatímco funkce arctg vrací hodnoty v intervalu ( π 2 , π 2 ) {\displaystyle \left(-{\frac {\pi }{2}},{\frac {\pi }{2}}\right)} , neboli (-90°, 90°) – informace o znaménkách obou souřadnic se při použití jednoho parametru ztratí; proto je nutné po použití funkce arctg určovat správnou polorovinu případně kvadrant.

Definice

atan2 ( y , x ) {\displaystyle \operatorname {atan2} (y,x)} je funkce R × R 0 ; 2 π ) {\displaystyle \mathbb {R} \times \mathbb {R} \rightarrow \langle 0;2\pi )} definovaná přepisem:

atan2 ( y , x ) = { arctg ( y x ) ,             je-li  ( x > 0 ) ( y >= 0 ) , arctg ( y x ) + π ,   je-li  ( x < 0 ) ,                           arctg ( y x ) + 2 π , je-li  ( x > 0 ) ( y < 0 ) , π 2 , je-li  ( x = 0 ) ( y > 0 ) , 3 2 π , je-li  ( x = 0 ) ( y < 0 ) , {\displaystyle \operatorname {atan2} (y,x)=\left\{{\begin{matrix}\operatorname {arctg} \left({\frac {y}{x}}\right),\ \ \ \ \ \ &{\mbox{je-li }}(x>0)\land (y>=0),\\\operatorname {arctg} \left({\frac {y}{x}}\right)+\pi ,\ &{\mbox{je-li }}(x<0),\ \ \ \ \ \ \ \ \ \ \ \ \ \\\operatorname {arctg} \left({\frac {y}{x}}\right)+2\pi ,&{\mbox{je-li }}(x>0)\land (y<0),\\{\frac {\pi }{2}},&{\mbox{je-li }}(x=0)\land (y>0),\\{\frac {3}{2}}\pi ,&{\mbox{je-li }}(x=0)\land (y<0),\\\end{matrix}}\right.}

kde arctg(x) je arkus tangens.

Striktně matematicky není hodnota atan2 ( 0 , 0 ) {\displaystyle \operatorname {atan2} (0,0)} definována (nulový vektor nemá definovanou orientaci); pro programování může být libovolná; obvykle se používá 0.

Jiná definice pomocí distribucí, konkrétně Heavisideovy skokové funkce θ ( x ) {\displaystyle \theta (x)} :

atan2 ( y , x ) = arctg ( y x ) + π θ ( x ) + 2 π θ ( x ) θ ( y ) . {\displaystyle \operatorname {atan2} (y,x)=\operatorname {arctg} \left({\frac {y}{x}}\right)+\pi \theta (-x)+2\pi \theta (x)\theta (-y).}

V programovacích jazycích je funkce atan2 definována tak, že vrací hodnoty v intervalu ( π ; π {\displaystyle (-\pi ;\pi \rangle } .

Užití

Pomocí takto definované funkce můžeme snadno zapsat např. přechod od kartézských souřadnic k polárním; bod o kartézských souřadnicích ( x , y ) {\displaystyle (x,y)} lze vyjádřit pomocí polárních souřadnic ( r , θ ) {\displaystyle (r,\theta )} takto:

x = r cos φ {\displaystyle x=r\cos {\varphi }\,}
y = r sin φ {\displaystyle y=r\sin {\varphi }\,}

odtud

r = x 2 + y 2 {\displaystyle r={\sqrt {x^{2}+y^{2}}}}
φ = atan2 ( y , x ) . {\displaystyle \varphi =\operatorname {atan2} \left(y,x\right).}

Funkci atan2(y,x) lze použít také pro přechod mezi kartézskou soustavou souřadnic a sférickou soustavou souřadnic, resp. válcovou soustavou souřadnic.

Obdobně, atan2(y,x) nám dává argument komplexního čísla x + iy.

Praktická poznámka

V programovacích jazycích (C, PHP, Java, JavaScript, ...) se vždy píše jako první parametr souřadnice y a jako druhý souřadnice x tj. tvar atan2(y, x).

Ale v tabulkových kalkulátorech (Microsoft Excel, LibreOffice Calc, apod.) bývá použit obrácený tvar tj. atan2(x, y)!

Odkazy

Související články

Externí odkazy