Anda di halaman 1dari 4

Nama : Muhammad Kevin Al Rahman

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 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)

# 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)

# 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 + 0.5 * acc_apel * timestep**2
  
    # Menghitung kecepatan baru apel
    vel_apel = vel_apel + acc_apel * timestep
  
    # Mengecek jika apel mencapai lantai
    if pos_apel[1] < 0:
        pos_apel[1] = 0
        vel_apel[1] = -vel_apel[1] * 0.8 # koefisien restitusi
  
    # Update posisi apel pada plot
    apel.set_data(pos_apel[0], pos_apel[1])
  
    return apel,

# 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()

Baris terakhir membuat animasi dengan memanggil animation.FuncAnimation()


dengan beberapa parameter. fig adalah objek figure yang akan digunakan untuk menampilkan
animasi. update_apel adalah fungsi yang akan dipanggil pada setiap iterasi untuk menghitung
pergerakan apel. frames=1000 menentukan jumlah iterasi yang akan dilakukan, dan
interval=10 menentukan interval waktu antara setiap iterasi dalam milidetik.
Terakhir, blit=True digunakan untuk mempercepat animasi dengan memperbarui
hanya area yang berubah pada setiap iterasi, daripada memperbarui seluruh plot. plt.show()
menampilkan plot dan memulai animasi.

Anda mungkin juga menyukai