Вы находитесь на странице: 1из 4

Санкт-Петербургский национальный исследовательский университет

информационных технологий, механики и оптики


УЧЕБНЫЙ ЦЕНТР ОБЩЕЙ ФИЗИКИ ФТФ

Группа M3218 К работе допущен

Студент Роман Никита Андреевич Работа выполнена

Преподаватель Хуснутдинова Наира Отчет принят

Рабочий протокол и отчет по моделированию

Задание:
Решение:
Для выполнения данного задания нами был выбран язык программирования python. Для
корректного выполнения задания нам необходимы некоторые формулы, которые будут
заложены в программу.
Для решения данной задачи можно использовать следующие формулы:

1. Для определения начальной скорости тела, необходимой для прохождения всей длины
дуги, можно использовать формулу для расчета начальной скорости:

√ а
V0 = (2∗g∗R∗(1−cos ( )))
2

где V0 - начальная скорость, g - ускорение свободного падения (примерно 9.8 м/с^2), R -


радиус дуги, a - угловой размер дуги.

2. Для визуализации траектории тела после отрыва от дуги можно использовать формулу
для расчета времени полета:

t=

2
(
2∗R
g
)

где t - время полета, R - радиус дуги, g - ускорение свободного падения.

3. Для расчета горизонтального и вертикального расстояния в зависимости от времени


можно использовать следующие формулы:

x = V0 * t
1
y = V0 * t - ( ) * g * t 2
2

где x - горизонтальное расстояние, y - вертикальное расстояние, V0 - начальная скорость, t


- время, g - ускорение свободного падения.

Код созданной программы:


import tkinter as tk
from tkinter import Label, Entry, Button
import numpy as np
import matplotlib.pyplot as plt

def calculate_initial_velocity():
g = 9.81
mu = float(friction_coefficient_entry.get())
t = float(mass_entry.get())
r = float(radius_entry.get())
alpha = float(angle_entry.get())
alpha = np.radians(alpha)
v0 = np.sqrt(g * r * (1 + mu * np.cos(alpha)))
result_label.config(text=f"Необходимая начальная скорость: {v0:.2f} м/с")

def visualize_trajectory():
g = 9.81
mu = float(friction_coefficient_entry.get())
t = float(mass_entry.get())
r = float(radius_entry.get())
alpha = float(angle_entry.get())
alpha = np.radians(alpha)

v0 = np.sqrt(g * r * (1 + mu * np.cos(alpha)))
t_total = 2 * v0 * np.sin(alpha) / g
dt = t_total / 1000

t_values = np.linspace(0, t_total, num=1001)


x_values = v0 * np.cos(alpha) * t_values
y_values = v0 * np.sin(alpha) * t_values - 0.5 * g * t_values ** 2

plt.figure()
plt.plot(x_values, y_values)
plt.xlabel('Горизонтальное расстояние (м)')
plt.ylabel('Вертикальное расстояние (м)')
plt.title('Траектория движения')
plt.grid(True)
plt.show()

window = tk.Tk()
window.title('Рассчет начальной скорости и визуализация траектории')

mass_label = Label(window, text='Масса тела (кг):')


mass_label.pack()
mass_entry = Entry(window)
mass_entry.pack()

radius_label = Label(window, text='Радиус дуги (м):')


radius_label.pack()
radius_entry = Entry(window)
radius_entry.pack()

angle_label = Label(window, text='Угол дуги (градусы):')


angle_label.pack()
angle_entry = Entry(window)
angle_entry.pack()

friction_coefficient_label = Label(window, text='Коэффициент трения:')


friction_coefficient_label.pack()
friction_coefficient_entry = Entry(window)
friction_coefficient_entry.pack()

calculate_button = Button(window, text='Рассчитать начальную скорость', command=calculate_initial_velocity)


calculate_button.pack()

visualize_button = Button(window, text='Визуализировать траекторию', command=visualize_trajectory)


visualize_button.pack()

result_label = Label(window, text='')


result_label.pack()

window.mainloop()

Результат выполнения работы программы со входными данными из первой строчки


таблицы:

Вам также может понравиться