Latihan 1 dari materi Physics-based Animation di Web Animation — praktek dengan editor kode interaktif, test case otomatis, dan hint terpandu. Langsung jalan di browser.
Lengkapi dua function pegas. Kode awal sudah berisi function kosongnya dan empat baris console.log-nya; isi function-nya dan biarkan baris console.log seperti adanya.
simulateSpring(from, to, options), dengan options berisi { stiffness, damping, mass }:
- Mulai dari posisi
from dengan kecepatan 0, dan dt = 1 / 60.
- Jalankan 4 langkah. Di tiap langkah hitung
percepatan = (-stiffness × (posisi - to) - damping × kecepatan) / mass, lalu perbarui kecepatan dulu (kecepatan += percepatan × dt), baru posisi dengan kecepatan yang baru (posisi += kecepatan × dt).
- Kembalikan array 5 posisi: posisi awal, lalu posisi sesudah tiap langkah, masing-masing dibulatkan 4 desimal dengan
Number(posisi.toFixed(4)). Pembulatan cuma untuk isi array; hitungannya tetap memakai angka utuh.
classifySpring(stiffness, damping, mass = 1):
- Hitung
ratio = damping / (2 × Math.sqrt(stiffness × mass)).
- Kembalikan
"underdamped" kalau ratio < 1, "critically-damped" kalau ratio === 1, dan "overdamped" kalau lebih dari 1.
Yang dinilai, empat baris console harus persis, berurutan:
[0,2.7778,7.7932,14.534,22.5254]
underdamped
critically-damped
overdamped
Nilai kembaliannya juga dinilai langsung: simulateSpring(50, 50, { stiffness: 100, damping: 10, mass: 1 })[4] harus 50 (pegas yang sudah di tujuan gak bergerak), dan classifySpring(100, 20, 4) harus "underdamped" (mass ikut dihitung).