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 estefalsedin 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.