"Математика в программировании"


Скачать публикацию
Язык издания: русский
Периодичность: ежедневно
Вид издания: сборник
Версия издания: электронное сетевое
Публикация: "Математика в программировании"
Автор: Григорьев Юрий Вадимович

Исследовательская работа "Математика в программировании"Автор работы: Григорьев Юрий Вадимович Руководитель проекта: Поврозюк Влада МихайловнаУчреждение: ОГБПОУ УТЖТПри работе над индивидуальным исследовательским проектом по математике и информатике на тему "Математика в программировании" студента 1 курса ОГБПОУ УТЖТ изучил необходимые математические функции и другие понятия (числа, сравнения, косинус/синус числа, операции сложения/вычитания/умножения/деления), которые помогают создать программу.В рамках исследовательской работы по математике и информатике на тему «Математика в программировании» выбрал среду разработки, создал программу на javascript, опираясь на полученные знания, а также привел доказательства о том, что программирование неразрывно связано с математикой.В содержании индивидуальной исследовательской работы (проекта) по математике (информатике) о математике в программировании студентом отражены выводы о том, что его программа уникальна и ее можно использовать любому желающему как основу (фундамент) для более сложных приложений или дальнейших экспериментов.ОглавлениеВведениеРешениеОбзор кода программыЗаключениеВведениеНасколько важна математика в программировании? Какую роль она играет при написании различных программ и кодов? В этом вопросе нам предстоит разобраться.Математика в IT-сфере занимает очень важную роль, программирование очень тесно связано с математикой. Логика программирования построена на математических законах и вычислениях. Чаще всего математика используется в программировании игр, различных симуляторов, а также при моделировании всевозможных систем. Но чтобы написать wпрограмму с достаточно простым алгоритмом, не обязательно быть специалистом в математике. Вам может хватить базовых школьных знаний в математике для создания отлично функционирующей программы, но для более сложных вычислений базовых знаний может не хватить.Я выбрал данную тему, чтобы провести исследование, насколько важна математика в программе, и какую часть она занимает при ее решении.:Изучить необходимые математические функции и другие понятия (числа, сравнения, косинус/синус числа, операции сложения/вычитания/умножения/деления), которые помогли бы создать программу.:Для начала необходимо изучить предметную область и выбрать математическую модель. Далее нужно выбрать среду разработки. После этого следует создать программу на javascript, используя знания. В конечном итоге после того, как я получу необходимые результаты, необходимо привести доказательства о том, что программирование неразрывно связано с математикой.:Объектом исследования данной работы является программа, создаваемая мною на javascript. Предметом исследования являются используемые математические функции, алгоритм и вычисления. За основу я выбрал поведение мяча, который свободно падает на жесткую поверхность, отскакивая от нее. Мяч, теряя свою энергию, в результате некоторого количества отскоков от поверхности, окажется неподвижным на ней.1. РешениеИзучив предметную область, я понял, что наиболее приближенным к реальной ситуации было бы использовать физическую модель с массой, ускорением свободного падения и использованием закона сохранения импульса (с потерей энергии при отскоке; трением о воздух мы в любом случае пренебрегаем, тк это уже совсем другой уровень вычислений). Но для меня этот вариант решения на текущий момент будет слишком сложной задачей, к которой я хотел бы вернуться в будущем.Уравнение, описывающее полное движение мяча от начала до конца и позволяющее точно получить координаты мяча в любой момент времени, тоже является очень непростым и использует законы и понятия (поисковики мне подсказывают уравнение Лагранжа 2-го рода "Дифференциальные уравнения движения механических систем"), с которыми я еще не знаком ни в рамках школьной программы, ни в рамках дополнительного самостоятельного обучения. Этот вариант мог бы дать мне положение мяча в любой момент времени.Исходя из последнего размышления, я выбрал наиболее приближенный и более простой вариант - это использовать уравнение косинуса, который мы успели изучить пока что только в рамках программы уроков физики.ГРАФИК y=cos(x)Однако косинус лучше всего подходит для описания колебательных процессов, поэтому отрицательную часть графика мне пришлось отразить относительно оси ОХ, взяв модуль функции. В итоге полуволны графика, которые располагаются ниже оси ОХ, будут располагаться выше оси, симметрично ей.ГРАФИК y=|cos(x)|Так как мяч с каждым отскоком теряет энергию, нам необходимо ввести переменную, которая позволяла бы уменьшать результат уравнения в зависимости от продолжения процесса (проигрывание анимации мяча).ГРАФИК y=k*|cos(x)|Для наглядности, в уравнение я ввел дополнительную переменную, влияющую на продолжительность отскоков мяча. Это прекрасно подходит для визуализации большей и меньшей "прыгучести" мяча. В итоге, чем дольше мы заставляем мяч прыгать, тем большее количество прыжков он сделает. При этом каждый следующий прыжок будет слабее предыдущего, а затухающий косинус дает ощущение отрицательного ускорения (замедления) мяча. Эта переменная и будет нашим рулем, которым мы будем влиять на сам процесс.2. Обзор кода программыФайл style.css - задание стилей (для направляющей, мяча и поверхности)Файл index.html - разметка страницы (подключение скрипта, определение объектов, задание поля ввода "прыгучести" от 1 до 5). Чтобы посмотреть анимацию, откройте файл в браузере.Файл ball_tween.js - скрипт программыfunction tween(options) var start = performance.now()window.requestAnimationFrame(callback)запрашивает браузер вызвать предоставленную пользователем функцию обратного вызова перед следующей перерисовкойсоответствует частоте обновления дисплеяrequestAnimationFrame(function animate(time) timeFraction от 1 до 0 (равномерно)time - текущее времяstart - время старта анимацииtimePassed - сколько времени прошлоvar timePassed = time - start;var timeFraction = 1 - timePassed / options.duration;if (timeFraction < 0) timeFraction = 0;// маштаб прошедшего времениvar timeScale = 200;// текущее состояние анимации (применение функции отскока "bounce")var progress = 1 - options.timing(timeFraction, timePassed/timeScale)// отрисовкаoptions.draw(progress);// условие продолжения анимацииif (timeFraction > 0) requestAnimationFrame(animate)function bounce(timeFraction, scaledTime) // timeFraction от 1 до 0 (равномерно)// console.log(timeFraction, time);// затухающее движение по косинусу (с учетом относительного значения остатка продолжительности)var res = timeFraction * Math.cos(scaledTime);// отражение отрицательных значений графика косинуса (относительно оси OX)res = Math.abs(res);return res;function onBallClick() tween({// чем больше прыгучесть, тем дольше будет анимацияduration: 3000 * jumpInput.value,timing: bounce,jumping: jumpInput,draw: function(progress) {ball.style.top = progress * 500 + 'px';ЗаключениеИсследовательская часть заключается в том, что с помощью выбранной математической модели, пусть и весьма приближенной к реалистичной, я смог ввести дополнительный рычаг для управления длительностью и количеством отскоков. Этот элемент управления поведением мяча получилось выразить математически с применением дополнительных переменных в формуле.Второстепенной частью является изучение javascript, как самого языка скрипта, правил составления программы, так и его графических возможностей.В заключении я хочу отметить следующие факты. Я привел пример яркого использования математики в области программирования. Даже для такой с виду довольно простой задачи потребовались знания тригонометрических функций и их графиков, знания операций сложения/вычитания/умножения/деления/сравнения, знания области отрицательных чисел. Логика и законы математики позволили мне строго выстроить последовательность обработки данных. Моя программа уникальна и может быть использована любым желающим как основа (фундамент) для более сложных приложений или дальнейших экспериментов.