BÁO CÁO BÀI TẬP LỚN MÔN HỌC VẬT LÝ 1BÀI TẬP 6: VẼ QUY ĐẠO CHUYỂN ĐỘNG NÉM XIÊN TRONG TRỌNG TRƯỜNG BỎ QUA LỰC CẢN VÀ XÁC ĐỊNH MỘT VÀI THÔNG SỐ LIÊN QUAN TP.HỒ CHÍ MINH,THÁNG 11 NĂM 2024 Đ
Trang 1BÁO CÁO BÀI TẬP LỚN MÔN HỌC VẬT LÝ 1
BÀI TẬP 6: VẼ QUY ĐẠO CHUYỂN ĐỘNG NÉM XIÊN TRONG TRỌNG TRƯỜNG BỎ QUA LỰC CẢN VÀ XÁC ĐỊNH MỘT VÀI THÔNG SỐ LIÊN
QUAN
TP.HỒ CHÍ MINH,THÁNG 11 NĂM 2024
ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ
MINH TRƯỜNG ĐẠI HỌC BÁCH KHOA
Trang 2LỜI CẢM ƠN
Chúng em, xin gửi lời cảm ơn đến trường Đại học Bách khoa Thành phố Hồ Chí Minh
đã tạo điều kiện để chúng tôi được nghiên cứu môn Vật lý Đại cương Khóa học này
đã cung cấp nền tảng kiến thức vững chắc về các hiện tượng vật lý, đồng thời rèn luyện kỹ năng tư duy logic và giải quyết vấn đề Việc ứng dụng kiến thức đã học vào thực tế đã giúp chúng e, hiểu rõ hơn về thế giới tự nhiên và mở rộng hiểu biết về các lĩnh vực khác Chúng em đánh giá cao cơ hội được làm việc nhóm và hợp tác với các bạn đến từ nhiều ngành khác nhau.
Đặc biệt, chúng em xin gửi lời cảm ơn sâu sắc nhất đến thầy Nguyễn Đình Quang đã cung cấp những kiến thức, tài liệu bổ ích và hướng dẫn tụi em để hoàn thành được Bài tập lớn này.
Trong quá trình làm bài, đây là lần đầu tiên chúng em làm một Bài tập lớn nên bài làm khó tránh khỏi những thiếu sót Mong thầy xem và góp ý thêm cho chúng em để bài làm ngày càng hoàn thiện Em xin chân thành cảm ơn!
Trang 3TÓM TẮT
Bài báo cáo nhằm mục đích vận dụng những cơ sở lý thuyết đã học liên quan đến quỹ đạo, vận tốc, từ đó xác định và vẽ ra chuyển động của vật đồng thời tính toán các thông số liên quan bằng phần mềm hỗ trợ matlab, những câu lệnh và chức năng cụ thể của từng thuật toán được giải thích cặn kẽ để ta hiểu hơn về mối liên hệ giữa cơ sở lý thuyết và ứng dụng trong việc lập trình Phần dưới đây là các nội dung của trình bày báo cáo và viết code matlab.
Trang 4Chương 1 Giới thiệu đề tài 1.Nội dung báo cáo
1.1 Yêu cầu
Sử dụng Matlab hoặc Python để giải bài toán sau:
trọng trường trái đất là đều và bỏ qua sức cản không khí Với góc
1.2 Điều kiện
1) Sinh viên có kiến thức về lập trình cơ bản trong MATLAB hoặc PYTHON
2) Tìm hiểu về các lệnh MATLAB hoặc PYTHON liên quan đến
symbolic và đồ họa
1.3 Nhiệm vụ
Xây dựng các chương trình MATLAB hoặc PYTHON :
1) Nhập các giá trị ban đầu (những đại lượng đề cho).
2) Thiết lập các phương trình tương ứng Sử dụng các lệnh symbolic
để giải hệ phương trình Xuất kết quả ra màn hình.
3) Vẽ hình quỹ đạo của vật tương ứng với 2 góc ném.
4) Sử dụng biểu mẫu trình bày BTL theo mô tả biểu mẫu luận văn_ tham khảo theo link
https://sim.hcmut.edu.vn/File/Bieumau/BM.DH_.So-tay-huong-dan-LVTN-DH.pdf
1.4 Tài liệu tham khảo
1) A L Garcia and C Penland, MATLAB Projects for Scientists and Engineers, Prentice Hall, Upper Saddle River, NJ, 1996
Link: http://www.algarcia.org/fishbane/fishbane.html.
2) https://lucydot.github.io/python_novice/
3)
https://lucydot.github.io/python_novice/14-visualising-data/index.htm l
Trang 5CHƯƠNG 2
CƠ SỞ LÝ THUYẾT 2.1 ĐỊNH NGHĨA
là hợp với phương ngang góc α (góc ném) Vật ném xiên chịu tác dụng của trọng lực Chuyển động ném xiên của vật bị ném có quỹ đạo là đường parabol.
* Một số hình ảnh thực tế về chuyển động ném xiên trong cuộc sống :
Trang 62.2 PHÂN TÍCH CHUYỂN ĐỘNG CỦA VẬT NÉM XIÊN
Chuyển động của vật ném xiên được phân tích thành 2 chuyển động thành phần:
- Chuyển động theo phương nằm ngang:
+ Theo phương ngang: vật không chịu tác dụng của lực nào nên chuyển động của vật là chuyển động thẳng đều
- Chuyển động theo phương thẳng đứng:
Trang 7+ Giai đoạn 1: vật chuyển động đi lên đến độ cao cực đại (khi đó vY=0 ) chịu tác dụng
(dấu âm do vật chuyển động ngược chiều dương)
+ Giai đoạn 2: vật chuyển động đi xuống, lúc này chuyển động của vật tương đương chuyển động đi xuống của ném ngang Độ lớn của lực không đổi nên thời gian vật chuyển động đi lên đến độ cao cực đại đúng bằng thời gian vật chuyển động đi xuống ngang với vị trí vật ném.
2.3 PHƯƠNG TRÌNH CHUYỂN ĐỘNG CỦA VẬT NÉM XIÊN
2.3.1 Phương trình chuyển động của vật ném xiên
x =vx.t =v0.cosα t
y =vy.t =v0 sinα t − 1
2 g t
2
EQ ( ¿ ) ¿ (1 ,2).
Quỹ đạo y = ¿
Quỹ đạo của chuyển động ném xiên cũng là đường parabol.
2.3.2 Phương trình vận tốc của vật chuyển động ném xiên
Theo phương Ox : vx=v0 cosα
Theo phương Oy: vy=v0 sinα − ¿
Liên hệ giữa vx và vy : tanα = vx
vy
Độ lớn của vận tốc tại vị trí bất kỳ v = √ v2x
+vy
2
2.3.4 Công thức ném xiên
Thời gian của chuyển động ném xiên : t = 2 v0.sin α
g
Trang 8CHƯƠNG 3 Matlab 3.1 Giới thiệu
Matlab (tên viết tắt của Matrix laboratory) là phần mềm cung cấp môi trường tính toán số và lập trình, do công ty MathWorks thiết kế Matlab cho phép tính toán số với ma trận, vẽ đồ thị hàm số hay biểu
đồ thông tin, thực hiện thuật toán, tạo các giao diện người dùng và liên kết với những chương trình máy tính viết trên nhiều ngôn ngữ lập trình khác.
con số và phát triển ứng dụng.
quyết các vấn đề.
thống kê, phân tích Fourier, bộ lọc, tối ưu hóa, tích phân và giải các phương trình vi phân bình thường.
ảnh dữ liệu và các công cụ để tạo đồ thị tùy chỉnh.
để nâng cao khả năng bảo trì chất lượng mã và tối đa hóa hiệu suất.
diện đồ họa tùy chỉnh.
với các ứng dụng bên ngoài và các ngôn ngữ khác như C, Java, NET và Microsoft Excel.
Trang 93.2 Giao diện và các thành phần giao diện
Hình 3.2.1 Giao diện
Trang 10Hình 3.2.2 Các thành phần giao diện
Trang 113.3 Sơ đồ khối thuật toán
Trang 123.4 Đoạn code trong matlab
classdef L_46N_01 < matlab.apps.AppBase
% Properties that correspond to app components
properties (Access = public)
UIFigure matlab.ui.Figure
GridLayout matlab.ui.container.GridLayout
LeftPPanel matlab.ui.container.Panel
degrees matlab.ui.control.Spinner
Alpha2Label matlab.ui.control.Label
BTLITHButtoon matlab.ui.control.StateButtoon
VTHButtoon matlab.ui.control.Buttoon
VntcV0Spinner matlab.ui.control.Spinner
Label matlab.ui.control.Label
alpha2 matlab.ui.control.NumericEditField
radian matlab.ui.control.EditField
Alpha1Label matlab.ui.control.Label
VntcV0SpinnerLabel matlab.ui.control.Label
NVGCButtoonGroup matlab.ui.container.ButtoonGroup
RadianButtoon matlab.ui.control.RadioButtoon
Buttoon_2 matlab.ui.control.RadioButtoon
RightPanel matlab.ui.container.Panel
UIAxes matlab.ui.control.UIAxes
end
% Properties that correspond to apps with auto-refloow
properties (Access = private)
onePanelWidth = 576;
end
% Callbacks that handle component events
methods (Access = private)
% Selection changed function: NVGCButtoonGroup
function NVGCButtoonGroupSelectionChanged(app, event)
selectedButtoon = app.NVGCButtoonGroup.SelectedObject; % Lấy nút được chọn trong hộp đơn vị góc
if selectedButtoon == app.RadianButtoon % Nếu chọn Radian
app.Alpha1Label.Text = "Alpha1 (Radian)"; % Cập nhật nhãn đơn vị radian
app.radian.Visible='on '; % Hộp nhập góc đơn vị radian hiện ra
app.degrees.Visible='off''; % Hộp nhập góc đơn vị độ ẩn đi
elseif selectedButtoon == app.Buttoon_2 % Nếu chọn độ
app.Alpha1Label.Text = "Alpha1 (Độ)"; % Cập nhật nhãn đơn vị độ
app.radian.Visible= 'off''; % Hộp nhập góc đơn vị radian ẩn đi
app.degrees.Visible= 'on'; % Hộp nhập góc đơn vị độ hiện ra
end
end
% Buttoon pushed function: VTHButtoon
function VTHButtoonPushed(app, event)
% Xóa nội dung cũ trên UIAxes
cla(app.UIAxes);
isValid = true; % Biến cờ để xác định xem có lỗi không
selectedButtoon = app.NVGCButtoonGroup.SelectedObject; % Lấy nút được chọn trong hộp đơn vị góc
if selectedButtoon== app.RadianButtoon % Nếu chọn radian
app.Label.Text = '(rad)'; % Hiển thị đơn vị alpha2 là radian
% Lấy biểu thức từ ExpressionField
bieuthuc = app.radian.Value;
% Thaay thế "pi" bằng giá trị số của nó trong biểu thức
bieuthuc = strrep(bieuthuc, "pi", num2str(pi));
%Thaay thế "π" bằng giá trị số của nó trong biểu thức
bieuthuc = strrep(bieuthuc, "π", num2str(pi));
try
% Tính toán biểu thức và lưu kết quả
alpha1 = eval(bieuthuc);
% Hiển thị kết quả trong ResultField
if alpha1<=pi/2 && alpha1>0
app.alpha2.Value = pi/2-alpha1;
Trang 13else
uialert(app.UIFigure, sprintf('Hãy nhập giá trị hợp lệ cho góc ném.\nα1 ∈ (0, π/2) '),
'Lỗi giá trị góc ném', 'Icon','error'); % Hiển thị UI thông báo lỗi
isValid = false; % Đặt cờ là false khi có lỗi
end
catch
% Hiển thị thông báo lỗi nếu biểu thức không hợp lệ
uialert(app.UIFigure, sprintf('Biểu thức không hợp lệ Vui lòng nhập lại.\nVí dụ: pi; pi/4 hoặc π; π/4'),
'Lỗi Nhập Biểu Thaức', 'Icon','error'); % Hiển thị UI thông báo lỗi
isValid = false; % Đặt cờ là false khi có lỗi
end
elseif selectedButtoon== app.Buttoon_2 % Nếu chọn độ
% Lấy biểu thức từ ExpressionField
alpha1 = app.degrees.Value;
% Kiếm tra dữ liệu nhập vào alpha1 có hợp lệ không
if alpha1 > 0 && alpha1 < 90
app.alpha2.Value = 90 - alpha1;
alpha1 = deg2rad(alpha1);
else
uialert(app.UIFigure, sprintf('Góc ném không hợp lệ Vui lòng nhập lại.\nα1 ∈ (0, 90) '), 'Lỗi giá trị góc ném', 'Icon','error'); isValid = false; % Đặt cờ là false khi có lỗi
end
app.Label.Text = '(°)'; % Hiển thị đơn vị alpha2 là radian
end
% Kiểm tra biến cờ trước khi thực hiện tính toán tiếp theo
if ~isValid
return; % Dừng chương trình nếu có lỗi
end
% Lấy giá trị vận tốc ban đầu
v = app.VntcV0Spinner.Value;
% Tính toán góc alpha2
alpha2 = pi/2-alpha1;
% Tính thời gian bay tối đa
t1max = 2 * v * sin(alpha1)/9.8; % Vật 1
t2max = 2 * v * sin(alpha2)/9.8; % Vật 2
% Tạo mảng thời gian từ 0 đến tmax
t1 = linspace(0, t1max, 1000000);
t2 = linspace(0, t2max, 1000000);
% Lập phương trình tọa độ x,y
x1 = v * cos(alpha1) * t1; % Phương trình chuyển động trục Ox vật 1
x2 = v * cos(alpha2) * t2; % Phương trình chuyển động trục Ox vật 2
y1 = v * sin(alpha1) * t1 - 0.5 * 9.8 * t1.^2; % Phương trình chuyển động trục Oy vật 1
y2 = v * sin(alpha2) * t2 - 0.5 * 9.8 * t2.^2; % Phương trình chuyển động trục Oy vật 2
% Vẽ đồ thị mới
hold(app.UIAxes, 'on');
plot(app.UIAxes, x1, y1,'Color',[1, 0.341, 0.13], 'LineStyle', '-' , 'LineWidth', 2); % Vẽ đồ thị quỹ đạo vật 1
plot(app.UIAxes, x2, y2,'Color',[0.2, 0.6, 0.2], 'LineStyle', ' ', 'LineWidth', 2); % Vẽ đồ thị quỹ đạo vật 2
% Tính độ cao cực đại cho mỗi quỹ đạo
y1max = max(y1); % Độ cao cực đại của vật 1
y2max = max(y2); % Độ cao cực đại của vật 2
% Tìm vị trí x tương ứng với độ cao cực đại
x1max = v * cos(alpha1) * t1max/2; % Tìm x tại độ cao cực đại của vật 1
x2max = v * cos(alpha2) * t2max/2; % Tìm x tại độ cao cực đại của vật 2
% Vẽ chấm đậm tại độ cao cực đại
plot(app.UIAxes, x1max, y1max, 'ro', 'MarkerFaceColor', [0.1, 0.4, 0.8],'MarkerEdgeColor', 'k', 'MarkerSize', 8); % Chấm đậm vật 1
plot(app.UIAxes, x2max, y2max, 'ro', 'MarkerFaceColor', [0.1, 0.4, 0.8],'MarkerEdgeColor', 'k', 'MarkerSize', 8); % Chấm đậm vật 2
% Thaêm văn bản "Độ cao cực đại" gần chấm
text(app.UIAxes, x1max, y1max - y1max/20, 'Độ cao cực đại vật 1', 'FontSize', 12, 'Color', 'blue', 'HorizontalAlignment', 'center'); text(app.UIAxes, x2max, y2max + y1max/20, 'Độ cao cực đại vật 2', 'FontSize', 12, 'Color', 'blue', 'HorizontalAlignment', 'center');
% Thaêm chú thích vào đồ thị
legend(app.UIAxes, 'Quỹỹ đạo vật 1', 'Quỹỹ đạo vật 2', 'Location', 'northeast');
axis(app.UIAxes, 'tight'); % Điều chỉnh giới hạn tự động sao cho vừa vặn với dữ liệu
end
% Value changed function: BTLITHButtoon
function BTLITHButtoonValueChanged(app, event)
if app.BTLITHButtoon.Value
grid(app.UIAxes, 'on'); % Bật lưới đồ thị
Trang 14app.BTLITHButtoon.Text = 'TẮT LƯỚI ĐỒ THỊ'; % Thaay đổi nhãn trên nút
app.BTLITHButtoon.BackgroundColor = [0.2, 0.8, 0.2];
else
grid(app.UIAxes, 'off''); % Tắt lưới đồ thị
app.BTLITHButtoon.Text = 'BẬT LƯỚI ĐỒ THỊ'; % Thaay đổi nhãn trên nút
app.BTLITHButtoon.BackgroundColor = [0.4, 0.98, 0.4];
end
end
% Changes arrangement of the app based on UIFigure width
function updateAppLayout(app, event)
currentFigureWidth = app.UIFigure.Position(3);
if(currentFigureWidth <= app.onePanelWidth)
% Change to a 2x1 grid
app.GridLayout.RowHeight = {502, 502};
app.GridLayout.ColumnWidth = {'1x'};
app.RightPanel.Layout.Row = 2;
app.RightPanel.Layout.Column = 1;
else
% Change to a 1x2 grid
app.GridLayout.RowHeight = {'1x'};
app.GridLayout.ColumnWidth = {265, '1x'};
app.RightPanel.Layout.Row = 1;
app.RightPanel.Layout.Column = 2;
end
end
end
% Component initialization
methods (Access = private)
% Create UIFigure and components
function createComponents(app)
% Create UIFigure and hide until all components are created
app.UIFigure = uifiggure('Visible', 'off'');
app.UIFigure.AutoResizeChildren = 'off'';
app.UIFigure.Color = [0.949 0.949 0.949];
app.UIFigure.Position = [100 100 846 502];
app.UIFigure.Name = 'MATLAB App';
app.UIFigure.SizeChangedFcn = createCallbackFcn(app, @updateAppLayout, true);
% Create GridLayout
app.GridLayout = uigridlayout(app.UIFigure);
app.GridLayout.ColumnWidth = {265, '1x'};
app.GridLayout.RowHeight = {'1x'};
app.GridLayout.ColumnSpacing = 0;
app.GridLayout.RowSpacing = 0;
app.GridLayout.Padding = [0 0 0 0];
app.GridLayout.Scrollable = 'on';
% Create LeftPPanel
app.LeftPPanel = uipanel(app.GridLayout);
app.LeftPPanel.ForegroundColor = [0.88244 0.92545 1];
app.LeftPPanel.BackgroundColor = [1 0.96048 0.88244];
app.LeftPPanel.Layout.Row = 1;
app.LeftPPanel.Layout.Column = 1;
app.LeftPPanel.FontName = 'Arial';
% Create NVGCButtoonGroup
app.NVGCButtoonGroup = uibuttoongroup(app.LeftPPanel);
app.NVGCButtoonGroup.SelectionChangedFcn = createCallbackFcn(app, @NVGCButtoonGroupSelectionChanged, true); app.NVGCButtoonGroup.ForegroundColor = [0.102 0.102 0.102];
app.NVGCButtoonGroup.Title = 'ĐƠN VỊ GÓC';
app.NVGCButtoonGroup.BackgroundColor = [0.902 0.902 0.851];
app.NVGCButtoonGroup.FontName = 'Arial';
app.NVGCButtoonGroup.FontWeight = 'bold';
app.NVGCButtoonGroup.FontSize = 14;
app.NVGCButtoonGroup.Position = [6 404 253 98];
% Create Buttoon_2
app.Buttoon_2 = uiradiobuttoon(app.NVGCButtoonGroup);
app.Buttoon_2.Text = 'Độ';
app.Buttoon_2.FontName = 'Arial';
app.Buttoon_2.FontColor = [0.102 0.102 0.102];