math.Asin în Go

Funcțiile trigonometrice inverse: arcsinus, arccosinus, arctangentă și Atan2, care dă unghiul unui punct (x, y).

Sintaxă
import "math"

func Asin(x float64) float64
func Acos(x float64) float64
func Atan(x float64) float64
func Atan2(y, x float64) float64

Ce face math.Asin

Funcțiile inverse pornesc de la o valoare și dau unghiul, în radiani. math.Asin(x) și math.Acos(x) primesc un x între -1 și 1 (altfel rezultatul este NaN). Asin dă un unghi între -π/2 și π/2, iar Acos între 0 și π. math.Atan(x) acceptă orice număr.

math.Atan2(y, x) dă unghiul dintre axa Ox și punctul (x, y), între -π și π. Spre deosebire de Atan(y/x), știe în ce cadran se află punctul și funcționează și când x este 0. Atenție la ordine: întâi y, apoi x.

Pentru a afișa rezultatul în grade înmulțești cu 180 / math.Pi.

Parametri

Parametru Descriere
x Valoarea sinusului, cosinusului sau tangentei.
y, x Pentru Atan2: coordonatele punctului (întâi y).

Ce returnează

Un unghi în radiani, ca float64.

Exemple

Exemplul 1: Unghiuri din valori, afișate în grade

package main

import (
    "fmt"
    "math"
)

func grade(r float64) float64 { return r * 180 / math.Pi }

func main() {
    fmt.Printf("asin(0.5) = %.4f°\n", grade(math.Asin(0.5)))
    fmt.Printf("acos(0.5) = %.4f°\n", grade(math.Acos(0.5)))
    fmt.Printf("atan(1)   = %.4f°\n", grade(math.Atan(1)))
    fmt.Println(math.Asin(2))
}

Rezultat

asin(0.5) = 30.0000°
acos(0.5) = 60.0000°
atan(1)   = 45.0000°
NaN

Exemplul 2: Atan2 știe cadranul

Punctele (1, 1) și (-1, -1) au același raport y/x, deci Atan dă același unghi. Atan2 le deosebește.

package main

import (
    "fmt"
    "math"
)

func main() {
    puncte := [][2]float64{{1, 1}, {-1, 1}, {-1, -1}, {0, 5}}
    for _, p := range puncte {
        x, y := p[0], p[1]
        unghi := math.Atan2(y, x) * 180 / math.Pi
        fmt.Printf("(%v, %v): %.1f°\n", x, y, unghi)
    }
    fmt.Printf("Atan(-1/-1) = %.1f°\n", math.Atan(-1.0/-1.0)*180/math.Pi)
}

Rezultat

(1, 1): 45.0°
(-1, 1): 135.0°
(-1, -1): -135.0°
(0, 5): 90.0°
Atan(-1/-1) = 45.0°

Greșeli frecvente

  • Inversezi argumentele lui Atan2: semnătura este Atan2(y, x), nu Atan2(x, y).
  • Dai lui Asin/Acos o valoare puțin peste 1, rezultată din erori de rotunjire (de exemplu 1.0000000002), și obții NaN. Limitează valoarea la [-1, 1] înainte.

Comenzi înrudite

  • math.Sin: Funcțiile trigonometrice sinus, cosinus și tangentă; unghiul se dă în radiani. Sincos le dă pe primele două deodată.
  • math.Hypot: Calculează ipotenuza: rădăcina din p² + q², fără depășiri pentru numere foarte mari sau foarte mici.
  • math.Sinh: Funcțiile hiperbolice sinh, cosh, tanh și inversele lor asinh, acosh, atanh.