Dalam beberapa tahun terakhir, saya mencoba mengembangkan aplikasi yang memerlukan grafik interaktif dengan potongan 3D dan titik-titik yang dapat dihapus dan ditambahkan secara dinamis. Dalam kasus ini, kita memiliki wireframe 3D sebagai latar belakang dan titik-titik yang dapat diubah-ubah.
Awalnya, saya mencoba membuat aplikasi ini menggunakan Python dan library Matplotlib. Saya mengumpulkan data 3D dari file raster TIF dan membuat wireframe plot menggunakan fungsi plot_wireframe
. Kemudian, saya membuat beberapa titik yang ingin ditampilkan pada plot dan menggunakan fungsi scatter
untuk menambahkan titik-titik tersebut ke plot.
Namun, ketika saya mencoba mengupdate grafik dengan menambahkan atau menghapus titik-titik, saya menyadari bahwa saya perlu menggunakan teknik tertentu untuk mengupdate grafik. Salah satu solusi yang saya temukan adalah menggunakan fungsi FuncAnimation
dari library Matplotlib. Fungsi ini memungkinkan kita membuat animasi berbasis waktu dan mengupdate grafik secara dinamis.
Berikut adalah contoh kode Python yang menunjukkan cara membuat aplikasi ini:
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d.axes3d import *
import numpy as np
# Set up the plot
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
# Create a wireframe plot
X, Y = np.meshgrid(np.arange(-1, 1, 0.1), np.arange(-1, 1, 0.1))
Z = X**2 + Y**2
ax.plot_wireframe(X, Y, Z, color='green')
# Define the points to be plotted
points_list = [(0, 0), (0.5, 0), (0.5, 0.5), (0, 0.5)]
dots, = ax.plot([p[0] for p in points_list], [p[1] for p in points_list], [Z[int(p[0]*10)+int(p[1]*10)] for p in points_list],
linestyle="", marker="o", c='r')
# Update the plot
def update_graph(i):
# Remove the previous points
dots.set_data([], [])
dots.set_3d_properties([])
# Add new points
if i == 0:
points_list = [(1, 1), (2, 2), (3, 3)]
elif i == 1:
points_list = [(4, 4), (5, 5), (6, 6)]
dots.set_data([p[0] for p in points_list], [p[1] for p in points_list])
dots.set_3d_properties([Z[int(p[0]*10)+int(p[1]*10)] for p in points_list])
# Create an animation
ani = matplotlib.animation.FuncAnimation(fig, update_graph, frames=2,
interval=500, blit=True)
# Show the plot
plt.show()
Dalam kode di atas, kita membuat wireframe plot menggunakan fungsi plot_wireframe
dan kemudian menambahkan titik-titik yang ingin ditampilkan pada plot menggunakan fungsi scatter
. Kemudian, kita definisi fungsi update_graph
yang memungkinkan kita mengupdate grafik dengan menambahkan atau menghapus titik-titik. Fungsi ini juga menggunakan fungsi FuncAnimation
untuk membuat animasi berbasis waktu.
Dengan demikian, aplikasi ini dapat dijalankan dan mengupdate grafik secara dinamis dengan menambahkan atau menghapus titik-titik.