Trong bài chia sẻ này, chúng ta sẽ tìm hiểu về đường tròn lượng giác và cách sử dụng Python để mô phỏng một đồ thị tương tác. Đồ thị này cho phép chúng ta kéo một điểm trên đường tròn, hiển thị các giá trị sin(x)
, cos(x)
với x
tương ứng số lần xoay quanh đường tròn. Đoạn mã sử dụng các thư viện Python như numpy
và matplotlib
để vẽ đồ thị và xử lý sự kiện kéo điểm.
1. Vẽ đường tròn lượng giác
Đường tròn lượng giác là một công cụ hữu ích để trực quan hóa các giá trị lượng giác như sin và cos. Đoạn mã Python vẽ một đường tròn với bán kính 1, hay còn gọi là đường tròn đơn vị. Các trục x và y lần lượt biểu diễn các giá trị của cos(x)
và sin(x)
.
# Vẽ đường tròn đơn vị circle = plt.Circle((0, 0), 1, color='magenta', fill=False, linewidth=3) ax.add_artist(circle)
Đường tròn này sẽ được vẽ trong một hệ tọa độ có giới hạn từ -1.2 đến 1.2 trên cả hai trục để hiển thị rõ ràng hơn.
2. Kéo điểm M và hiển thị giá trị sin, cos
Khi bạn kéo điểm M
minh hoạ cho góc lượng giác x
dọc theo đường tròn, các giá trị sin(x)
và cos(x)
sẽ thay đổi theo vị trí của điểm trên đường tròn. Chúng ta sử dụng sự kiện kéo chuột để cập nhật vị trí của điểm và hiển thị các giá trị mới.
# Hàm cập nhật khi kéo điểm M def on_move(event): x, y = event.xdata, event.ydata angle_rad = np.arctan2(y, x) sin_val = np.sin(angle_rad) cos_val = np.cos(angle_rad) # Cập nhật vị trí của điểm M point.set_data([cos_val], [sin_val])
Giá trị sin và cos được tính dựa trên góc của điểm M
so với trục x, bằng cách sử dụng hàm np.sin()
và np.cos()
từ thư viện numpy
.
3. Hiển thị nhãn và hình chiếu cos, sin
Để trực quan hóa thêm, chúng ta có thể hiển thị các nhãn cho giá trị cos(x)
và sin(x)
tại các vị trí chiếu của điểm M
lên trục x và y.
# Hình chiếu cos trên trục x cos_projection.set_data([cos_val, cos_val], [0, sin_val]) cos_label.set_text(f"{cos_val:.2f}") # Hình chiếu sin trên trục y sin_projection.set_data([0, cos_val], [sin_val, sin_val]) sin_label.set_text(f"{sin_val:.2f}")
Các giá trị này sẽ được cập nhật tự động khi điểm M
di chuyển, giúp bạn dễ dàng thấy sự thay đổi của các giá trị lượng giác.
4. Đồ thị xoắn ốc (spiral)
Một tính năng thú vị khác của đoạn mã là khả năng vẽ một đường xoắn ốc khi điểm M
quay nhiều lần quanh đường tròn. Đường xoắn ốc này thể hiện sự tăng dần của bán kính khi số lần quay tăng lên, và nó được tính toán bằng các hàm lượng giác.
# Tính đường xoắn ốc dựa trên góc def calculate_spiral_curve(theta_max): theta = np.linspace(0, np.radians(theta_max), 1000) r = 0.1 + 0.01 * np.abs(theta) x = r * np.cos(theta) y = r * np.sin(theta) return x, y
Đường xoắn ốc này sẽ mở rộng khi góc của điểm M
vượt qua một vòng 360 độ.
5. Tính năng tương tác với checkbox
Bạn có thể bật tắt việc hiển thị các giá trị cos, sin và góc của điểm M
bằng các checkbox. Điều này giúp người dùng kiểm soát được những thông tin nào muốn thấy khi tương tác với đồ thị.
# Checkbox hiển thị cos, sin và góc check = CheckButtons(check_ax, ['Hiển thị cos', 'Hiển thị sin', 'Hiển thị góc'], [True, True, True]) # Hàm cập nhật checkbox def func(label): if label == 'Hiển thị cos': show_cos = not show_cos elif label == 'Hiển thị sin': show_sin = not show_sin elif label == 'Hiển thị góc': show_angle = not show_angle plt.draw()
Khi người dùng nhấp vào checkbox, đồ thị sẽ được cập nhật ngay lập tức để phản ánh thay đổi.
Kết luận
Qua đoạn mã Python này, bạn đã có thể tạo ra một đồ thị tương tác về đường tròn lượng giác, giúp trực quan hóa các giá trị sin(x)
, cos(x)
.
Dưới đây là mã Python đầy đủ để vẽ đường tròn lượng giác trên
Nguyễn Hoàng Hải và ChatGPT
0 Nhận xét