Тема уроку: створення програмного проекту, який наочно моделює фізичний процес дифузії двох ідеальних газів із зображеннями молекул різного кольору.
Мета: виробити практичні навички використання засобів мови Ruby і бібліотеки Ruby 2D щодо подійно та об'єктно орієнтованого програмування, придатного для створення наочних моделей динамічних систем.
По завершенню вивчення учень знає і уміє використовувати засоби мови Ruby з використанням бібліотеки Ruby 2D створення наочних моделей динамічних систем.
Обладнання: комп’ютери з встановленими ОС, браузером, середовищем програмування мовою Ruby з використанням бібліотеки Ruby 2D, дана інструкція.
Структура уроку
Хід уроку
1. Організаційний етап
Привітання з класом. Перевірка присутності і готовності учнів до уроку.
2. Актуалізація опорних знань
Статичність — спільність для всіх екземплярів класу.
Назва статичної змінної розпочинається з подвоєння символів @@.
Статичний метод — метод, що відноситься до всього класу, а не до конкретного представника. Вiн має доступ лише до статичних змінних і методів. Форма опису статичного методу така:
def self.назва … end
Конструктор (класу) — метод створення представника класу, який буде застосовано при інтепретації запису:
Назва класу.new
Форма опису конструктора така:
def initialize(перелік параметрів) … end
Змінні класу є унікальними для кожного представника класу. Запис їхніх назв розпочинають з одного символа @.
Методи класу відносяться до певного представника класу. На відміну від статичних методів, вони мають доступ до змінних та методів свого представника класу. Форма опису метода класу така:
def назва (перелік параметрів) … end
Ruby2D надає можливість працювати з вікнами і зображеннями (перейти за посиланнями і повторити вивчений раніше матеріал).
Дифузія газів — це явище взаємопроникнення двох або кількох речовин.
Дифузію спостерігають у газі, якщо цей газ неоднорідний за складом, тобто якщо він складається з двох або більше речовин, концентрації яких змінюються від точки до точки. Процес дифузії полягає у тому, що кожна зі складових суміші переходить із тих частин об’єму газу, де її концентрація вища, туди, де вона нижча. У результаті процесу дифузії у газі концентрація кожної складової стане однаковою в усіх точках простору, зайнятого газом.
Ідеальний газ — фізична модель, що не передбачає взаємодію між молекулами газу, а тлумачить їх як матеріальні точки.
3. Інструктаж з ТБ
4. Вироблення пратичних навичок
Завдання. Створити програмний проект, який наочно моделює фізичний процес дифузії двох ідеальних газів — сукупностей матеріальних точок, які не взаємодіють між собою, але відбиваються від стінок прямокутної ємності і перегородки, яка у початковий момент розділяє навпіл ємність на дві однакові частини, що містять різні гази. Використати надані зображення молекул і та вертикальної перегородки .
Вказівки до виконання
(розробити у результаті конкурсу ідей)
Завантажити бібліотеку Ruby 2D:
require 'ruby2d'
Надати значення сталим налаштування:
$NUM_BALLS = 30 # кількість кругів одного кольору $WALL_TIME = 7 # час існування перегородки (у секундах) $MIN_SPEED = 1 # мінімально можлива швидкість (у пікселях) $MAX_SPEED = 4 # максимально можлива швидкість (у пікселях) $BALL_DIAMETR = 10 # діаметр кола (у пікселях) $SCREEN_HEIGHT = 480 # висота вікна (у пікселях) $SCREEN_WIDTH = 640 # ширина вікна (у пікселях) $WALL_WIDTH = 6 # ширина перегородки (у пікселях)
та залежним від них величинам:
# Права межа для абсциси лівого кута зображення диска $EFFECTIVE_WIDTH = $SCREEN_WIDTH - $BALL_DIAMETR # Нижня межа для ординати нижнього кута зображення диска $EFFECTIVE_HEIGHT = $SCREEN_HEIGHT - $BALL_DIAMETR # Права межа для дисків ліворуч від перегородки $EFFECTIVE_WIDTH_WALL_LEFT = $SCREEN_WIDTH/2 - $WALL_WIDTH/2 - $BALL_DIAMETR # Ліва межа для дисків праворуч від перегородки $EFFECTIVE_WIDTH_WALL_RIGHT= $SCREEN_WIDTH/2 + $WALL_WIDTH/2
описати статичний масив для зберігання даних про всі диски:
@@array = Array.new
описати статичний метод, який повертає статичний масив @@array з усіма збереженими представниками класу:
def self.all_instances @@array end
і занесенням створеного представника класу до статичного масиву такою вказівкою:
@@array << self
При справдженні t використати зображення блакитного кольору, інакше — рожевого;
описати метод move зміни координат:
рівномірний поступальний рух (сталі прирости координат між оновленням вікна програми) без зіткнення з перешкодою;
зміна координат (дзеркальне відбиття від межі перешкод) і проекцій швидкостей (зміна знаку на протилежний для складової швидкості, перпендикулярної межі перешкоди) при зіткненні з перешкодою.
де:
x' — абсциса після відбиття,
x — абсциса при відсутносні перешкоди і відбиття,
x0 — абсциса межі перешкоди, від якої здійснено відбиття.
Аналогічне співвідношення можна записати для горизонтальної перешкоди при заміні абсцис x, x', x0 на ординати y, y', y0.
Описати початковий стан моделі:
задати висоту й ширину екрану;
створити зображення перегородки посередині вікна програми;
використавши оператор циклу, створити диски по одному у випадкових точках з випадковими швидкостями:
задати початкове значення true індикатору існування перегородки;
надати значення змінній для збереження часу початку роботи:
time = Time.now
У циклі оновлення екрану update do (приблизно 60 разів на секунду) для класу Ball викликати статичний метод all_instances, що повертає статичний масив @@array з усіма представниками класу, і для кожного представника здійснити таке:
якщо час існування перешкоди минув, змінити значення індикатора існування перегородки на false і видалити перегородку;
застосувати метод move зміни координат.
Ball.all_instances.each do |i|
Показати вікно програми вказівкою show.
5. Підбиття підсумків уроку
Виставлення оцінок.
6. Домашнє завдання
Текст упорядкувала Лісогор Анастасія Анатоліївна, вчитель інформатики cпеціалізованої школи № 88 Печерського району міста Києва, під час виконання випускної роботи на курсах підвищення кваліфікації з 26.03.2018 р. по 30.03.2018 р.