Визуализация моделирования физических законов

Разработка графического приложения моделирования полета снаряда из пушки. Выбор языка программирования (Python) и математической модели. Оптимизация процесса анимации. Составление системы уравнений для управления наклоном ствола абстрактной пушки.

Рубрика Программирование, компьютеры и кибернетика
Вид статья
Язык русский
Дата добавления 27.02.2018
Размер файла 90,1 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

9

Размещено на http://www.allbest.ru/

Московский политехнический университет

Визуализация моделирования физических законов

Авторы: Черников А.С., Горбунова Т.Н.

Резюме

Процесс визуализации физических процессов состоит из выбора математической модели с необходимым количеством параметров, оптимизации процесса анимации и выбора эффективного средства реализации сформулированной модели. Основная задача данной работы была в разработке графического приложения моделирования полета снаряда из пушки. В качестве языка программирования был выбран Python. Подобные задачи актуальны в образовательной среде, а также в сфере интерактивного взаимодействия. В статье рассмотрена математическая модель полета снаряда на плоскости с использованием абстрактной пушки без учета сопротивления воздуха, а также была произведена адаптация ее к компьютерному моделированию процесса. Также были проведены исследования, связанные с самим процессом анимации, а именно с изучением зависимости скорости смены кадров от траектории движения снаряда с учетом физиологических особенностей восприятия человека с целью оптимизации программного кода, а именно времени его выполнения. Для данной задачи был разработан алгоритм и программный код его реализующий, который представлен в работе с необходимыми комментариями. Результаты тестирования программы показали хороший уровень визуализации физической модели. Так же были предложены дальнейшие этапы его развития.

Введение

Современный уровень развития и распространения компьютерных технологий дает возможность, а также, в свою очередь, определяет способ представления информации в графическом виде как наиболее оптимальной для восприятия и анализа [1,2]. Также особо следует выделить образование и сферы научного исследования, где моделирование различных процессов является эффективным и широко используемым инструментом. В связи с этим была сформулирована задача визуализации криволинейных процессов. В качестве средства реализации был выбран популярный сегодня языка Python, возможности которого позволяют реализовать поставленные задачи [8].

Целью работы было разработать на языке программирования Python графическое приложение для моделирования стрельбы из пушки на плоскости. Сопротивление воздуха не учитывать. Пушка должна обладать прицелом, отображающем расчетную точку попадания снаряда.

Математическая модель

В качестве модели, описывающей движение снаряда, была выбрана простейшая модель, отвечающая заданным в постановке задачи условиям, описывающая положение снаряда на момент времени согласно следующим уравнениям:

Где и координаты снаряда по осям и в момент времени соответственно, - угол наклона выстрела к горизонту, - начальная скорость снаряда, - время полета снаряда, - ускорение свободного падения, взято равным 9,8 м/c2.

Для управления наклоном ствола абстрактной пушки была составлена система уравнений, полученной из:

1. общей формулы прямой между двумя точками, использующейся при создании алгоритма Брезенхэма рисования прямой линии на ЭВМ [4],

2. формулы расстояния между двумя точками (в случае задачи это основание ствола пушки и конца пушки).

Учитывая, что в рамках данной задачи можно ограничиться решением для первой координатной четверти, т.к. мы всегда можем выполнять преобразования систем координат по типу аффинных, если нам потребуется, например, масштабирование одной системы координат в другой или их поворот и перемещения. А также очевидно, что в рамках данной системы по смыслу , , и . Таким образом, система

моделирование физический закон визуализация программирование

может быть упрощена до

где - длина отрезка между точкой начала координат, совпадающей с точкой начала ствола и курсором мыши, а и - координаты этого курсора.

Анимация

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

Однако, снаряд летит по параболе, а вычисление её длинны довольно ресурсоемкая процедура, требующая численных методов интегрирования, что не оптимально с точки зрения производительности задачи программного рендеринга. Поскольку человеческий глаз и восприятие не идеальны и обладают естественными для людей особенностями [3, 7], то на практике для расчета числа кадров оказалось достаточным аппроксимировать параболу простой ломаной линией с одной единственной точкой излома в самой верхней её точке, тогда экспериментальным путем было подобрано количество кадров порядка 30 в секунду.

Разработка алгоритма программы

После получения минимально необходимой математической модели был разработан алгоритм для приложения. В общих чертах его логику можно описать следующим образом:

1. Создание необходимых объектов для отрисовки и переменных, описывающих начальные параметры модели, таких как начальную скорость снаряда и ускорение свободного падения

2. Код для отрисовки начального положения пушки и прицела, а также поверхности по которой проводится стрельба

3. Реализация поворота пушки, согласно наведению прицела при помощи курсора мыши с помощью функции rotate_cannon, которая наводит ствол пушки на одну прямую с курсором мыши, а также отмечает расчетное место попадания снаряда на поверхности

4. Для стрельбы была разработана функция shoot_ball, которая отрисовывает анимацию полета снаряда по траектории, описываемой моделью [5,6].

Таким образом, было получено всё необходимое для разработки кода нашей программы, который приведен ниже в полном объеме с поясняющими комментариями на языке Python:

# - * - coding: utf-8 - *-

import math

import time

from tkinter import *

scene_width = 640

scene_height = 480

c = Canvas (width=scene_width, height=scene_height, bg='grey80')

c. pack ()

cannon_length = 70

v = 70

g = 9.8

def rotate_cannon (x_i, y_i):

mn = y_i/x_i

y = (mn * cannon_length) / (math. sqrt (mn * mn + 1))

x = math. sqrt (cannon_length * cannon_length - y * y)

c. coords (cn, 0, scene_height-10, int (x), scene_height-10-int (y))

angle = math. atan2 (x_i, y_i) # угол наклона ствола пушки

t = 2*v*math. sin (1.5707963267948966-angle) /g

x_t = v*t*math. cos (1.5707963267948966-angle) # координата прицела

c. coords (cursor, int (x_t-5), scene_height-15, int (x_t+5), scene_height-5)

return

def motion (event):

if event. x > 0 and event. y < scene_height-10:

rotate_cannon (float (event. x), float (470-event. y))

return

def shoot_ball (event):

ball = c. create_oval (-5, scene_height-15, 5, scene_height-5, fill='yellow')

angle = math. atan2 (float (event. x), float (470-event. y)) # угол выстрела

delta_t = 2*v*math. sin (1.5707963267948966-angle) /g # время полета снаряда

x_t = v*delta_t*math. cos (1.5707963267948966-angle) /10 # расстояние приземления снаряда

y_max = v*delta_t/2*math. sin (1.5707963267948966-angle) - g*delta_t*delta_t/8 # максимальная высота полета снаряда

"""

Теперь, чтобы не проводить вычисления без лишней необходимости, длину кривой по которой летит снаряд для увеличения зависимости количества кадров от параметров выстрела, мы будем аппроксимировать ломаной кривой из 2-ух отрезков, точка начала полета снаряда, точка максимума по y и точка приземления снаряда.

Это позволит нам сделать более реалистичной анимацию полета снаряда, что будет комфортно для пользователя.

"""

length = 2*math. sqrt (x_t*x_t/4+y_max*y_max) # грубая оценка длины траектории

num_frames = int (length/delta_t) # количество кадров для отрисовки

delta_t = delta_t / num_frames

for i in range (num_frames): # цикл отрисовки

x_ball = v* (i+1) *delta_t*math. cos (1.5707963267948966-angle)

y_ball = v* (i+1) *delta_t*math. sin (1.5707963267948966-angle) - g* (i+1) *delta_t* (i+1) *delta_t/2

c. coords (ball, int (x_ball-5), scene_height-y_ball-15, int (x_ball+5), scene_height-y_ball-5)

c. update ()

time. sleep (0.02)

c. coords (ball, int (x_ball - 5), scene_height - y_ball - 15, int (x_ball + 5), scene_height - y_ball - 5)

return

c. bind ('<Motion>', motion)

c. bind ('<Button 1>', shoot_ball)

c. create_oval (-25, 445, 25, 495, fill='#141414')

c. create_rectangle (25, scene_height-10, 0, scene_height, fill='#141414')

cn = c. create_line (0, scene_height-10, cannon_length, scene_height-10, width=10, fill='#141414')

c. create_line (0, scene_height-10, scene_width, scene_height-10, width=1, fill='black')

cursor=c. create_oval (cannon_length, scene_height-15, cannon_length+10, scene_height-5, fill='red')

mainloop ()

Конечно, данный код можно оптимизировать, например, вынеся расчеты часто проводимых фрагментов функций в отдельные переменные, но это усложнит простоту понимания примера, а скорость работы кода достаточна для плавной анимации на ЭВМ, предоставленных для данной работы.

Скриншоты работы программы приведены ниже. На рисунке 1 показаны пушка, прицел и указатель мыши для настройки параметров задачи в начальный момент времени. На рисунке 2 - пушка и снаряд в конечный момент времени.

Рис.1 Пушка и прицел

Рис.2 Пушка после выстрела

Выводы

В результате данной работы была выработана математическая модель, адаптированная к процессу визуализации на компьютере. Исследован процесс анимации и его особенности с моделированием криволинейных процессов. Разработана программа на Python с программной библиотекой tkinter.

В ходе выполнения задачи было разработано приложение, отвечающее требованиям поставленной задачи. Данное приложение можно рассматривать как базовое для дальнейшей реализации процесса визуализации как с дополнительными параметрами этой модели, так и для других задач этого класса.

Литература

1. Горбунова Т.Н. Инфографика в процессе обучения / Актуальные проблемы развития вертикальной интеграции системы образования, науки и бизнеса: экономические, правовые и социальные аспекты: материалы V Международной научно - практической конференции 1-2 декабря 2016г. - Т.2/под ред. С.Л. Иголкина. - Воронеж: ВЭПИ, 2016. - 169-172с.

2. Данилова Н.Н. Физиология высшей нервной деятельности: учебник для студентов вузов / Н.Н. Данилова, А.Л. Крылова; отв. ред.Е. Баранчикова. - Ростов н/Д.: Феникс, 1999. - 480с.: ил. - (Серия "Учебники и учебные пособия").

3. Кудрина, М.А. Компьютерная графика: учеб. / М.А. Кудрина, К.Е. Климентьев. - Самара: Изд-во Самар. гос. аэрокосм. ун-та, 2013. - 138 с.

4. Роджерс Д. Алгоритмические основы машинной графики. - М.: Мир, 1989. - С.54-63.

5. Саммерфилд Марк. Python на практике. - Перевод с английского. - М.: ДМК Пресс, 2014. - 338 с. - ISBN 978-5-97060-095-5.

6. Федоров Д.Ю. Основы программирования на примере языка Python: учеб. пособие / Д.Ю. Федоров. - СПб., 2016. - 176 с.

7. Восприятие Информации Человеком. Человеческое Восприятие [Электронный ресурс] - Электрон. дан. - cop. 2010-2011. - Режим доступа: http://mywebpro.ru/psihika/vospr-infor-chelov-chelov-vospr.html

8. [Электронный ресурс] https: // www.python.org/doc/

Размещено на Allbest.ru


Подобные документы

  • Динамика движения материальной точки. Разработка программы, моделирующей траектории полета снаряда при стрельбе из пушки под заданным углом к горизонту. Ее структурная схема, системные требования к ней. Создание приложения в среде Borland C++Builder.

    курсовая работа [3,2 M], добавлен 10.06.2014

  • Разработка специализированных языков имитационного моделирования высокого уровня. Составление схемы процесса конвейерной обработки шестерен, представляющий собой двухфазную СМО с ожиданием и бесконечной очередью. Оптимизация математической модели системы.

    курсовая работа [392,8 K], добавлен 28.06.2011

  • Расчет тепловой схемы с применением методов математического моделирования. Разработка алгоритма реализации модели. Составление программы для ПЭВМ, ее отладка и тестирование. Проведение численного исследования и параметрическая оптимизация системы.

    курсовая работа [2,8 M], добавлен 01.03.2013

  • Структура математической модели линейной задачи, алгоритм симплекс-метода. Разработка программы: выбор языка программирования, входные и выходные данные, пользовательский интерфейс. Описание программы по листингу, тестирование, инструкция по применению.

    курсовая работа [1,2 M], добавлен 31.05.2013

  • Расчет параметров моделирования в системе Fortran. Описание алгоритма и математической модели системы, их составляющих. Моделирование шума с заданной плотностью распределения вероятностей. Выполнение моделирования работы системы при входном сигнале N(t).

    курсовая работа [896,3 K], добавлен 20.06.2012

  • Основные теоретические положения объектно–ориентированной технологии программирования. Характеристика языка и словарь моделирования UML. Представление управления моделью. Построение диаграммы классов и описание функционирования предметной области.

    курсовая работа [859,4 K], добавлен 11.05.2015

  • Этапы развития, особенности и возможности языка программирования Java; происхождение названия. Приложения Sun Microsystems: идеи, примитивные типы. Python - высокоуровневый язык программирования общего назначения: структуры данных, синтаксис и семантика.

    реферат [79,0 K], добавлен 23.06.2012

  • Анализ моделирования информационной системы на стадии формирования концепции, определение требований и ограничений, требуемых материальных, финансовых и трудовых ресурсов. Характеристика обоснования выбора средств моделирования и языка программирования.

    курсовая работа [1005,6 K], добавлен 15.02.2012

  • Оптимизация математической модели и реинжиниринг бизнес-процессов. Основные методологии, используемые в BPwin. Выбор архитектуры информационной системы. Обоснование подбора языка программирования. Установка и запуск программы в среде MS-DOS и Windows.

    дипломная работа [1002,3 K], добавлен 13.04.2014

  • Отличительные особенности языка программирования Python: низкий порог вхождения, минималистичный язык, краткий код, поддержка математических вычислений, большое количество развитых web-фреймворков. Традиционная модель выполнения программ на языке Python.

    реферат [51,9 K], добавлен 18.01.2015

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.