Perhitungan sinus, cosinus, dan tangensio muncul di banyak bidang: pemrosesan sinyal, simulasi gelombang, grafika komputer, hingga perhitungan arah pada data GPS. NumPy menyediakan fungsi-fungsi tersebut sebagai ufunc yang bekerja pada seluruh elemen array sekaligus, sehingga kita bisa menghitung ribuan sudut dalam satu pemanggilan tanpa loop eksplisit.

Bab ini membahas empat kelompok kemampuan:

  • Fungsi dasar np.sin, np.cos, dan np.tan beserta aturan input radian.
  • Konversi satuan sudut dengan np.deg2rad dan np.rad2deg.
  • Fungsi invers np.arcsin, np.arccos, dan np.arctan.
  • Fungsi np.arctan2 yang mampu membedakan empat kuadran.

Sin, Cos, dan Tan Bekerja dalam Radian #

Kesalahan paling sering dialami pemula: menganggap input fungsi trigonometri NumPy dalam derajat. Kenyataannya, np.sin, np.cos, dan np.tan selalu memperlakukan input sebagai radian. Untuk data derajat, konversikan lebih dulu dengan np.deg2rad; untuk arah sebaliknya gunakan np.rad2deg.

python
import numpy as np

sudut_derajat = np.array([0.0, 30.0, 90.0, 180.0])
sudut_radian = np.deg2rad(sudut_derajat)
print(sudut_radian)
print(np.sin(sudut_radian))
print(np.cos(sudut_radian))

Output yang Dihasilkan:

text
[0.         0.52359878 1.57079633 3.14159265]
[0.0000000e+00 5.0000000e-01 1.0000000e+00 1.2246468e-16]
[ 1.00000000e+00  8.66025404e-01  6.12323400e-17 -1.00000000e+00]

Mari kita bedah baris demi baris:

  1. Baris 3 (sudut_derajat = np.array(...)): interpreter membuat array float64 berisi empat sudut dalam derajat.
  2. Baris 4 (np.deg2rad(...)): setiap elemen dikalikan pi/180, sehingga 90.0 menjadi 1.57079633 radian.
  3. Baris 6 (np.sin(...)): fungsi menghitung sinus untuk tiap elemen radian. Nilai sin(90°) muncul sebagai 1.0, sedangkan sin(180°) muncul sebagai 1.2246468e-16 — bukan nol persis. Fenomena ini dibahas pada bagian berikutnya.
  4. Baris 7 (np.cos(...)): cos(90°) menghasilkan 6.123234e-17, nilai yang secara praktis sama dengan nol tetapi secara biner bukan nol.

Ketelitian di Nilai Istimewa: sin(pi) Bukan Nol Persis #

Nilai np.pi yang dipakai NumPy adalah representasi float64 terdekat untuk pi, dan pi sendiri adalah bilangan irasional. Akibatnya, hasil pada nilai istimewa bisa menyisakan residu sangat kecil. Kita amati langsung:

python
import numpy as np

print(np.sin(np.pi / 2))
print(np.sin(np.pi))
print(np.tan(np.pi))

Output yang Dihasilkan:

text
1.0
1.2246467991473532e-16
-1.2246467991473532e-16

sin(pi/2) menghasilkan 1.0 karena nilai float64 terdekat dari hasil sebenarnya memang tepat satu. Sebaliknya, sin(pi) menghasilkan 1.2246467991473532e-16, bukan 0.0: input np.pi sedikit meleset dari pi sebenarnya, dan kesalahan input tersebut terbawa ke hasil. Nilai residu 10^-16 ini berada pada batas presisi float64 dan secara praktis dapat dianggap nol.

Fungsi Invers: arcsin, arccos, dan arctan #

Fungsi invers mengembalikan sudut dari nilai rasio. np.arcsin dan np.arccos hanya menerima input pada rentang [-1, 1]; input di luar rentang tersebut menghasilkan nan. Keluarannya dalam radian, jadi kita bungkus dengan np.rad2deg agar mudah dibaca:

python
import numpy as np

rasio = np.array([0.0, 0.5, 1.0])
print(np.rad2deg(np.arcsin(rasio)))
print(np.rad2deg(np.arccos(rasio)))
print(np.rad2deg(np.arctan(np.array([0.0, 1.0]))))

Output yang Dihasilkan:

text
[ 0. 30. 90.]
[90. 60.  0.]
[ 0. 45.]

Perhatikan bahwa arcsin(0.5) menghasilkan 30 derajat, sesuai rasio sin(30°) = 0.5. Fungsi np.arctan satu argumen hanya mengembalikan sudut pada rentang -90 hingga 90 derajat karena tanda y dan x dari rasio asalnya tidak diketahui.

arctan2 untuk Empat Kuadran #

Untuk memulihkan sudut penuh dari pasangan koordinat, gunakan np.arctan2(y, x). Fungsi ini membaca tanda kedua argumen sehingga hasilnya mencakup seluruh empat kuadran pada rentang (-180, 180] derajat:

python
import numpy as np

titik_y = np.array([1.0, 1.0, -1.0, -1.0])
titik_x = np.array([1.0, -1.0, 1.0, -1.0])
print(np.rad2deg(np.arctan2(titik_y, titik_x)))

Output yang Dihasilkan:

text
[  45.  135.  -45. -135.]

Tabel berikut merangkum hasilnya per kuadran:

Titik (y, x)Kuadranarctan2 (derajat)
(1, 1)I45.0
(1, -1)II135.0
(-1, 1)IV-45.0
(-1, -1)III-135.0

Dengan np.arctan2, dua titik yang rasionya sama (1/1 dan -1/-1) tidak lagi menghasilkan sudut yang sama. Inilah alasan fungsi ini menjadi pilihan standar untuk menghitung arah vektor pada navigasi dan grafika.