UTS Komputasi Kevin
UTS Komputasi Kevin
NIM : 2110129110001
Apel Jatuh karena Gaya Gravitasi
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation
# Konstanta
g = 9.81 # percepatan gravitasi bumi (m/s^2)
timestep = 0.01 # interval waktu dalam detik
# Membuat animasi
ani = animation.FuncAnimation(fig, update_apel, frames=1000, interval=10, blit=True)
plt.show()
Penjelasan singkat:
Pada bagian awal program, didefinisikan konstanta-konstanta yang digunakan, seperti
percepatan gravitasi bumi dan interval waktu.
Kemudian dibuat objek apel dengan massa, posisi awal, kecepatan awal, dan
percepatan awal tertentu.
Setelah itu, dibuat figure untuk menampilkan animasi dengan batas-batas sumbu x
dan y, aspek rasio yang sama, dan titik berwarna merah sebagai representasi apel.
Selanjutnya, dibuat fungsi update_apel yang akan dipanggil pada setiap iterasi
animasi untuk menghitung pergerakan apel dan memperbarui posisi apel pada plot.
Di dalam fungsi update_apel, posisi baru dan kecepatan baru apel dihitung
menggunakan rumus kinematika dasar. Jika apel mencapai lantai, posisi dan
kecepatannya diubah sesuai dengan koefisien restitusi (0,8 dalam contoh ini).
Akhirnya, animasi dibuat dengan memanggil fungsi animation.FuncAnimation dan
menampilkan plot dengan memanggil plt.show().
Berikut adalah penjelasan lebih detail mengenai kode program animasi Python
menggunakan NumPy untuk menampilkan simulasi jatuhnya sebuah apel akibat gaya
gravitasi:
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation
Baris pertama hingga ketiga merupakan perintah untuk mengimpor beberapa modul
yang diperlukan untuk membuat program animasi. numpy digunakan untuk melakukan
operasi numerik, matplotlib.pyplot digunakan untuk membuat plot, dan matplotlib.animation
digunakan untuk membuat animasi.
# Konstanta
g = 9.81 # percepatan gravitasi bumi (m/s^2)
timestep = 0.01 # interval waktu dalam detik
Baris keempat dan kelima adalah pengaturan konstanta untuk program ini. g adalah
percepatan gravitasi bumi dalam satuan meter per detik kuadrat, dan timestep adalah interval
waktu dalam detik antara setiap iterasi animasi.
# Membuat objek apel
m_apel = 0.1 # massa apel (kg)
pos_apel = np.array([0, 10]) # posisi awal apel (m)
vel_apel = np.array([0, 0]) # kecepatan awal apel (m/s)
acc_apel = np.array([0, -g]) # percepatan awal apel (m/s^2)
Baris keenam hingga kesembilan membuat objek apel yang akan jatuh akibat gaya
gravitasi. Variabel m_apel adalah massa apel dalam satuan kilogram. Variabel pos_apel
adalah array NumPy dua dimensi yang menyimpan posisi awal apel dalam satuan meter.
Variabel vel_apel adalah array NumPy dua dimensi yang menyimpan kecepatan awal apel
dalam satuan meter per detik. Variabel acc_apel adalah array NumPy dua dimensi yang
menyimpan percepatan awal apel dalam satuan meter per detik kuadrat, di mana percepatan
pada sumbu y diatur sebesar -g untuk menunjukkan arah turunnya apel akibat gaya gravitasi.
# Membuat figure untuk menampilkan animasi
fig, ax = plt.subplots()
ax.set_xlim(0, 20)
ax.set_ylim(0, 10)
ax.set_aspect('equal')
apel, = ax.plot([], [], 'ro', ms=10)
Baris kesepuluh hingga keempat belas membuat figure untuk menampilkan animasi.
plt.subplots() membuat objek figure dan axes yang akan digunakan untuk menampilkan
animasi. ax.set_xlim() dan ax.set_ylim() menentukan batas-batas sumbu x dan y pada plot,
dan ax.set_aspect() menentukan aspek rasio antara sumbu x dan y agar sama. apel adalah
variabel yang menampung representasi visual dari apel dalam bentuk titik berwarna merah
dengan ukuran 10.
# Fungsi untuk menghitung pergerakan apel pada setiap iterasi
def update_apel(num):
global pos_apel, vel_apel, acc_apel
# Menghitung posisi baru apel
pos_apel = pos_apel + vel_apel * timestep +
Baris kelima belas hingga kedua puluh delapan adalah definisi fungsi
update_apel(num) yang akan dipanggil pada setiap iterasi animasi untuk menghitung
pergerakan apel. Variabel num merupakan parameter yang tidak digunakan dalam fungsi ini.
Pada bagian pertama fungsi, kita mendeklarasikan variabel pos_apel, vel_apel, dan
acc_apel sebagai variabel global, yang dapat diubah nilainya oleh fungsi ini. Variabel-
variabel ini merepresentasikan posisi, kecepatan, dan percepatan apel pada setiap iterasi
animasi.
Pada bagian kedua fungsi, kita menghitung posisi baru apel berdasarkan persamaan
pergerakan jatuh bebas:
# Menghitung posisi baru apel
pos_apel = pos_apel + vel_apel * timestep + 0.5 * acc_apel * timestep**2
# Menghitung kecepatan baru apel
vel_apel = vel_apel + acc_apel * timestep
# Mengubah posisi apel pada plot
apel.set_data(pos_apel[0], pos_apel[1])
return apel,
Pada baris ke-21, kita menghitung posisi baru apel menggunakan persamaan
pergerakan jatuh bebas dengan menggunakan variabel pos_apel, vel_apel, dan acc_apel. Pada
baris ke-24, kita menghitung kecepatan baru apel dengan mengupdate variabel vel_apel
menggunakan percepatan yang sama seperti sebelumnya.
Pada baris ke-27, kita memperbarui posisi apel pada plot dengan memanggil
apel.set_data() dan memasukkan posisi baru apel dari array pos_apel. Pada akhirnya, kita
mengembalikan variabel apel pada baris ke-29 sebagai hasil yang akan ditampilkan pada
setiap iterasi.
# Membuat animasi
ani = animation.FuncAnimation(fig, update_apel, frames=1000, interval=10, blit=True)
plt.show()