math.Sin în Go

Funcțiile trigonometrice sinus, cosinus și tangentă; unghiul se dă în radiani. Sincos le dă pe primele două deodată.

Sintaxă
import "math"

func Sin(x float64) float64
func Cos(x float64) float64
func Tan(x float64) float64
func Sincos(x float64) (sin, cos float64)

Ce face math.Sin

math.Sin, math.Cos și math.Tan primesc unghiul în radiani, nu în grade. Un cerc complet are 2π radiani, deci 180° = π (constanta math.Pi). Conversia: radiani = grade * math.Pi / 180.

math.Sincos(x) returnează deodată sinusul și cosinusul aceluiași unghi, mai rapid decât două apeluri separate. Este util când rotești puncte sau calculezi coordonate pe un cerc.

Pentru că π nu se poate scrie exact în float64, math.Sin(math.Pi) nu dă exact 0, ci un număr foarte mic (aproximativ 1.22e-16). Afișează rezultatele cu un număr fix de zecimale.

Parametri

Parametru Descriere
x Unghiul, în radiani.

Ce returnează

Valoarea funcției, ca float64. Sincos returnează perechea (sin, cos).

Exemple

Exemplul 1: Unghiuri cunoscute, din grade în radiani

package main

import (
    "fmt"
    "math"
)

func main() {
    for _, grade := range []float64{0, 30, 45, 60, 90} {
        r := grade * math.Pi / 180
        fmt.Printf("%2.0f°  sin = %.4f  cos = %.4f\n", grade, math.Sin(r), math.Cos(r))
    }
    fmt.Printf("tan(45°) = %.4f\n", math.Tan(math.Pi/4))
    fmt.Println(math.Sin(math.Pi))
}

Rezultat

 0°  sin = 0.0000  cos = 1.0000
30°  sin = 0.5000  cos = 0.8660
45°  sin = 0.7071  cos = 0.7071
60°  sin = 0.8660  cos = 0.5000
90°  sin = 1.0000  cos = 0.0000
tan(45°) = 1.0000
1.2246467991473515e-16

Exemplul 2: Puncte pe un cerc cu Sincos

Patru puncte la distanță egală pe un cerc cu raza 10: x = r·cos(u), y = r·sin(u). -0.00 apare pentru că cos(3π/2) calculat este un număr negativ foarte mic, nu exact 0.

package main

import (
    "fmt"
    "math"
)

func main() {
    raza := 10.0
    for i := range 4 {
        unghi := float64(i) * math.Pi / 2
        s, c := math.Sincos(unghi)
        fmt.Printf("punctul %d: (%.2f, %.2f)\n", i+1, raza*c, raza*s)
    }
}

Rezultat

punctul 1: (10.00, 0.00)
punctul 2: (0.00, 10.00)
punctul 3: (-10.00, 0.00)
punctul 4: (-0.00, -10.00)

Exemplul 3: Înălțimea unui copac

Stai la 20 m de copac și vezi vârful sub un unghi de 35°: înălțimea este distanța înmulțită cu tangenta unghiului.

package main

import (
    "fmt"
    "math"
)

func main() {
    distanta := 20.0
    unghi := 35 * math.Pi / 180
    fmt.Printf("Înălțimea copacului: %.2f m\n", distanta*math.Tan(unghi))
}

Rezultat

Înălțimea copacului: 14.00 m

Greșeli frecvente

  • Dai unghiul în grade: math.Sin(90) nu este 1, ci sinusul a 90 de radiani (≈ 0.894). Convertește mai întâi în radiani.
  • Compari math.Sin(math.Pi) == 0: rezultatul este false din cauza preciziei. Compară cu o toleranță.

Comenzi înrudite

  • math.Asin: Funcțiile trigonometrice inverse: arcsinus, arccosinus, arctangentă și Atan2, care dă unghiul unui punct (x, y).
  • math.Sinh: Funcțiile hiperbolice sinh, cosh, tanh și inversele lor asinh, acosh, atanh.
  • math.Hypot: Calculează ipotenuza: rădăcina din p² + q², fără depășiri pentru numere foarte mari sau foarte mici.