При работе над индивидуальным исследовательским проектом по математике и информатике на тему "Математика в программировании" учащийся 9 класса изучил необходимые математические функции и другие понятия (числа, сравнения, косинус/синус числа, операции сложения/вычитания/умножения/деления), которые помогают создать программу.
Подробнее о работе:
Обучающийся 9 класса в рамках исследовательской работы по математике и информатике на тему «Математика в программировании» выбрал среду разработки, создал программу на javascript, опираясь на полученные знания, а также привел доказательства о том, что программирование неразрывно связано с математикой.
В содержании индивидуальной исследовательской работы (проекта) по математике (информатике) о математике в программировании учеником 9 класса отражены выводы о том, что его программа уникальна и ее можно использовать любому желающему как основу (фундамент) для более сложных приложений или дальнейших экспериментов.
Оглавление
Введение
1. Решение
2. Обзор кода программы
Заключение
Введение
Насколько важна математика в программировании? Какую роль она играет при написании различных программ и кодов? В этом вопросе нам предстоит разобраться.
Математика в 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, как самого языка скрипта, правил составления программы, так и его графических возможностей.
В заключении я хочу отметить следующие факты. Я привел пример яркого использования математики в области программирования. Даже для такой с виду довольно простой задачи потребовались знания тригонометрических функций и их графиков, знания операций сложения/вычитания/умножения/деления/сравнения, знания области отрицательных чисел. Логика и законы математики позволили мне строго выстроить последовательность обработки данных. Моя программа уникальна и может быть использована любым желающим как основа (фундамент) для более сложных приложений или дальнейших экспериментов.