مقدمه
در این برنامه، مسیر حرکت و معادلات مربوط به یک پرتابه در حالت کلی شبیهسازی شدهاست. در ادامه به بررسی فرمول و روابط پرتابه میپردازیم.
معادلات کلی پرتابه
مهمترین پارامترهای این معادلات، سرعت اولیه افقی و عمودی پرتاب میباشد؛ از اینرو میتوان نوشت:
$${V_o}_{x} = V_o\ cos(\theta)$$
$${V_o}_{y} = V_o\ sin(\theta)$$
مدت زمان کل پرواز:
$$t_{T} = {{{V_o}_{y} + \sqrt{{V_o}_{y}^2 + 2gy_o}} \over g}$$
ارتفاع بیشینه (ارتفاع اوج):
$$h_{max} = y_o + {{V_o}_{y}^2 \over 2g}$$
برد (حداکثر فاصله افقی از مکان پرتاب تا مکان فرود):
$$R = {{V_o}_{x} \left({V_o}_{y} + \sqrt{{V_o}_{y}^2+2gy_o}\right) \over g}$$
معادلات مسیر پرتابه:
$$y = y_o – {{gx^2 \over 2{V_o}_{x}^2} + tan(\theta)\ x}$$
$$y = y_o – {gt^2 \over 2} + {V_o}_{y}t$$
بررسی کد برنامه
1. مشخص نمودن پارامترهای ورودی:
1 2 3 4 5 6 |
v0 = input('Enter the initial speed (m/s):\n'); theta = input('Enter the initial angle (Deg):\n'); y0 = input('Enter the initial height (m):\n'); animationFPS = 100; g = 9.80665; |
2. محاسبه پارامترهای موردنیاز جهت شبیهسازی و اطلاعات فیزیکی:
1 2 3 4 5 |
v0X = v0 * cosd(theta); v0Y = v0 * sind(theta); totalTime = (v0Y + sqrt(v0Y^2 + 2*g*y0)) / g; maxHeight = y0 + v0Y^2 / (2 * g); maxRange = v0X * (v0Y + sqrt(v0Y^2 + 2*g*y0)) / g; |
3. نمایش اطلاعات فیزیکی در محیط Command Window:
1 2 3 4 5 |
fprintf('V0 = %.1f m/s\n', v0); fprintf('Theta0 = %.1f°\n', theta); fprintf('Maximum Height = %.2f m\n', maxHeight); fprintf('Maximum Range = %.2f m\n', maxRange); fprintf('Total Flight Time = %.3f s\n', totalTime); |
4. تشکیل دادههای مسیر حرکت پرتابه جهت رسم بر روی نمودار:
1 2 3 |
syms x x = 0 : .001 : maxRange; y = y0 + ((-1 * g * x.^2) / (2 * v0X^2)) + (x .* tand(theta)); |
5. ایجاد یک figure جهت رسم نمودارها:
1 2 3 4 5 6 7 8 9 |
Fig = figure; Fig.WindowState = 'Maximized'; hold on plot(x, y, 'r--', 'LineWidth', 2); xlabel('Distance (m)'); ylabel('Height (m)'); axis equal xlim([0 maxRange + 2]); ylim([0 maxHeight + 2]); |
6. تشکیل دادههای موقعیتی پرتابه برحسب زمان:
1 2 3 4 |
syms t t = 0 : (1 / animationFPS) : totalTime; x = t .* v0 * cosd(theta); y = y0 + (-0.5 * g * t.^2) + (t .* v0Y); |
7. راهاندازی و ایجاد شکل پرتابه (به صورت دایروی و به رنگ آبی و ضخامت 5pt):
1 2 3 |
hold on plot_ = plot(0, 0, 'bO', 'LineWidth', 5); legend('Path', 'Projectile'); |
8. شبیهسازی حرکت بهصورت انیمیشن:
1 2 3 4 5 6 |
for timeStep = 1 : length(t) set(plot_, 'XData', x(timeStep), 'YData', y(timeStep)); title(sprintf('t = %.3fs | x = %.2fm | y = %.2fm', timeStep * (1 / animationFPS), x(timeStep), y(timeStep))); drawnow; pause(1 / animationFPS); end |
پیشنمایشهای شبیهسازی
بخش دانلود
شامل موارد زیر:
- m-فایل پروژه اصلی
توجهات: