***
Для любителей пневматического оружия необходимо знать дульную энергию своего оружия.
Почему?
Потому что величина дульной энергии используется (наряду с другими характеристиками) для законодательного регулирования оборота оружия.
В Федеральном законе «Об оружии» указано, что пневматическое оружие с дульной энергией до 3 Дж не требует регистрации и не считается оружием.
***
Дульная энергия – это начальная кинетическая энергия пули, измеренная на расстоянии не более 1 метра от дульного среза ствола оружия.
Рассчитывается по формуле:
E = m * v²/2,
где E – дульная энергия (в джоулях);
m – масса пули (в килограммах);
v – начальная скорость пули (в метрах в секунду).
С расстоянием скорость, а, следовательно, и кинетическая энергия пули уменьшается под воздействием сопротивления воздуха. Степень этого уменьшения определяется баллистическим коэффициентом пули.
Для измерения скорости пули пневматического оружия используется так называемый хронограф.
***
Первоначально сделал шаблон для расчёта дульной энергии в Microsoft Office Excel [по формуле =ПРОИЗВЕД(0,001;B3;B2;B2)/2]:
Но потом решил создать программу для расчёта в Python.
***
Код программы с графическим интерфейсом для расчёта дульной энергии пневматического оружия:
# Author: Netler
#
# Copyright: (c) Netler 2021
import tkinter as tk
from tkinter import messagebox
def calculate_energy():
try:
# Получаем значения из полей ввода
v = float(entry_speed.get()) # начальная скорость, м/с
m = float(entry_mass.get()) # масса пули, г
# Проверяем, что значения положительные
if v <= 0 or m <= 0:
result_label.config(text="Некорректный ввод данных")
return
# Рассчитываем дульную энергию по формуле E = (0,001 * m * v²) / 2
E = (0.001 * m * v**2) / 2
# Выводим результат с округлением до 2 знаков после запятой
result_label.config(text=f"{E:.2f} Дж")
except ValueError:
# Если ввод некорректный (не число)
result_label.config(text="Некорректный ввод данных")
def close_app():
root.destroy()
# Создаём главное окно
root = tk.Tk()
root.title("Расчёт дульной энергии пневматического оружия")
root.geometry("500x400")
root.resizable(False, False) # Запрещаем изменение размера окна
# Заголовок
title_label = tk.Label(root, text="Расчёт дульной энергии пневматического оружия", font=("Arial", 14, "bold"))
title_label.pack(pady=10)
# Поле для ввода начальной скорости
speed_frame = tk.Frame(root)
speed_frame.pack(pady=5)
speed_label = tk.Label(speed_frame, text="Начальная скорость пули, v, м/с:")
speed_label.pack(side=tk.LEFT, padx=5)
entry_speed = tk.Entry(speed_frame, width=20)
entry_speed.pack(side=tk.LEFT)
# Поле для ввода массы пули
mass_frame = tk.Frame(root)
mass_frame.pack(pady=5)
mass_label = tk.Label(mass_frame, text="Масса пули, m, г:")
mass_label.pack(side=tk.LEFT, padx=5)
entry_mass = tk.Entry(mass_frame, width=20)
entry_mass.pack(side=tk.LEFT)
# Поле для вывода результата
result_frame = tk.Frame(root)
result_frame.pack(pady=15)
result_label_text = tk.Label(result_frame, text="Дульная энергия, E (Дж), E = (0,001 × m × v²) / 2:")
result_label_text.pack(side=tk.TOP)
result_label = tk.Label(result_frame, text="", font=("Arial", 12), fg="blue")
result_label.pack(side=tk.TOP)
# Кнопки
button_frame = tk.Frame(root)
button_frame.pack(pady=20)
calculate_button = tk.Button(button_frame, text="Вычислить", command=calculate_energy, width=12, bg="#4CAF50", fg="white")
calculate_button.pack(side=tk.LEFT, padx=10)
close_button = tk.Button(button_frame, text="Завершить", command=close_app, width=12, bg="#f44336", fg="white")
close_button.pack(side=tk.LEFT, padx=10)
# Запуск главного цикла обработки событий
root.mainloop()
***
Описание программы
1. Импорт библиотек:
Используется tkinter для создания графического интерфейса и messagebox (хотя в данном коде он не задействован, оставлен для возможного расширения функционала).
2. Функции:
• calculate_energy() – выполняет расчёт дульной энергии:
- Получает значения скорости (v) и массы (m) из полей ввода.
- Проверяет, что введённые значения – положительные числа.
- Применяет формулу E = (0,001 * m * v **2) / 2 (для удобства пользователя масса пули вводится в граммах, поэтому в расчёте применяется коэффициент 0,001).
- Выводит результат с точностью до 2 знаков после запятой или сообщение об ошибке.
• close_app() – закрывает приложение при нажатии кнопки «Завершить».
3. Создание интерфейса:
- Главное окно (root) имеет заголовок, размер 500×400 пикселей и фиксированный размер.
- Заголовок программы размещён вверху.
- Два поля ввода для скорости и массы с соответствующими подписями.
- Поле вывода результата с поясняющей формулой.
- Две кнопки: «Вычислить» (зелёная) и «Завершить» (красная).
4. Обработка ошибок:
- Если введены не числа или отрицательные значения, выводится сообщение «Некорректный ввод данных».
5. Визуальное оформление:
- Шрифты и цвета подобраны для лучшей читаемости.
- Элементы аккуратно размещены с отступами.
***
Как запустить программу
1. Убедитесь, что у вас установлен Python (версия 3.x).
2. Сохраните код в файл с именем, например, gun_energy_calculator.py.
3. Запустите файл через командную строку (python gun_energy_calculator.py) или двойным щелчком (если ассоциировано с Python).