Тема: cтворення комп’ютерної моделі процесу взаємопов’язаного функціонування двох чи більше об’єктів.
Мета:
навчити створювати моделі руху об’єкта на площині з використанням графічних примітивів мовою Java;
навчити програмно втілювати поняття «об’єктно-орієнтоване програмування», «клас», «об’єкт», «метод».
Після виконання роботи учень повинен:
Обладнання: ПК з встановленими ОС, JDK і середовищем програмування мовою Java (подальші ілюстрації подано для NetBeans).
Структура уроку
Хід уроку
1. Організаційний момент
Вітання з класом. Перевірка готовності учнів до уроку.
2. Актуалізація опорних знань
Згадаймо деякі факти з математики й фізики, необхідні для побудови комп'ютерної моделі взаємодії кількох дисків (куль), які рухаються у межах прямокутника (прямокутного паралелепіпеда), відбиваючись від його стінок і злипаючись у момент дотику в одну. Для моделі плоских фігур (дисків) в усіх формулах нижче потрібно вилучити вирази з аплікатою z.
Відстань між точками A(xA , yA , zA) i B(xB , yB , zB) дорівнює такому виразу:
де піднесення до степеня 1/2 означає видобування арифметичного (невід'ємного) кореня квадратного.
Координати C(xC , yC , zC) середини відрізка з кінцями A(xA , yA , zA) i B(xB , yB , zB) задовольняють такі рівності:
які еквівалентні таким:
Рівномірний прямолінійний рух матеріальної точки у 3-вимірному означає таку зміну координат з плином часу t:
де:
x(t), y(t), z(t) — координати у момент часу t;
vx, vy, vz — сталі проєкції швидкості на осі координат.
Пружне відбивання від площини {x = a} матеріальної точки, яка, крім моменту удару, рухається рівномірно і прямолінійно, означає таке:
складова швидкості, перпендикулярна до площини відбивання, зберігає довжину, але змінює свій напрям на протилежний;
складова швидкості, паралельна площині відбивання, не змінюється після відбивання.
Внаслідок цього у довільний момент часу після відбивання відрізок, який сполучає відбиту і невідбиту точки:
Позначимо:
(x₀ , y₀ , z₀) — координати матеріальної точки, які б вона мала після моменту відбивання, якби самого відбивання не відбулося;
vx , vy , vz — проєкції швидкості на осі координат матеріальної точки, які б вона мала після моменту відбивання, якби самого відбивання не відбулося.
Наступні перетворення формулами задають перехід від властивостей невідбитої до властивостей відбитої матеріальної точки:
Якщо замість матеріальної точки розглянути кулю радіуса r з координатами центра (x₀ + r, y₀ + r, z₀ + r), формули будуть такими самими, як і для матеріальної точки, крім формули для абсциси x. Маємо еквівалентність з відбиванням матеріальної точки, що збіється з центром кулі:
Заміною літер "x", "y", "z" з поданих вище формул можна отримати формули для відбивання від площини {y = a} або {z = a}.
Закони збереження маси й імпульсу класичної механіки при "злипанні" двох куль в одну призводять до справдження таких рівностей:
m = m1 + m2;
x = (m1 x1 + m2 x2) / m;
y = (m1 y1 + m2 y2) / m;
z = (m1 z1 + m2 z2) / m;
vx = (m1 v1x + m2 v2x) / m;
vy = (m1 v1y + m2 v2y) / m;
vz = (m1 v1z + m2 v2z) / m,
де:
m — маса кулі — результату "злипання";
m1 , m2 — маси куль до зіткнення;
x1 , y1 , z1 — координати центра кулі маси m1, якби вона не "злиплася" з іншою;
x2 , y2 , z2 — координати центра кулі маси m2, якби вона не "злиплася" з іншою;
x, y, z — координати центра мас системи двох куль — центру результату злипання;
vx , vy , vz — координати швидкості центра мас системи двох куль — центру результату злипання;
v1x , v1y , v1z — координати швидкості кулі маси m1 до зіткнення;
v2x , v2y , v2z — координати швидкості кулі маси m2 до зіткнення.
3. Вивчення нового матеріалу
Ознайомитися з описом від початку і до прикладу 1 включно та з прикладом 25.
4. Інструктаж з ТБ
5. Вироблення практичних навичок
Завдання 1. Створити проект «Колонія водоростей», в якому є спочатку кілька персонажів — колоній одноклітинних зелених водоростей однакової маси, які буде зображено кругами однакового радіусу. Вони рухаються прямокутним полем рівномірно і прямолінійно до дзеркального відбивання від його меж або до дотику двох колоній, після якого відбувається злипання і перетворення двох на одну колонію при збереженні маси й імпульсу руху (сума добутків мас і швидкостей). Радіус зображення пропорційний кореню квадратному маси колонії (тобто маса пропорційна площі відповідного зображення), а його центр є центром мас двох колоній, що злипаються.
Вказівки до виконання
Завантажити середовище програмування NetBeans.
Тут і далі проілюстровано англомовний інтерфейс версії 12.3 NetBeans при ОС Linux Mint 20 Mate. Російськомовний інтерфейс буде використано, якщо мовою інтерфейсу операційної системи буде російська. Наразі україномовний інтерфейс для Netbeans не передбачено.
отримати такий вигляд вікна програми.
Замінити вміст файлу Graphtest.java на інший, раніше розглянутий у прикладі створення анімації з використанням класів Timer і TimerTask.
Вилучити з файлу Graphtest.java вказівки роботи із зображеннями та лічильником кадрів j, замінити назву вікна на "Модель дисків, що злипаються".
Зберегти проект: або використати вказівку меню Файл / Сохранить всё, або натиснути кнопку з такою самою назвою на панелі інструментів.
Перевірити працездатність проекту, запустивши на виконання: натиснувши або клавішу F6, або кнопку Run Project (Запустить проект) на панелі інструментів. У вкладенні Output (Вывод), розташованому в нижній частині вікна середовища програмування, прочитати повідомлення про успішне виконання пакету і час роботи або повідомлення про помилки. У разі неправильної роботи програми виправити помилки у коді програми. При потребі порівняти створений код з очікуваним.
Створити файл Ball.java:
в контекстному меню пакунку graphtest вибрати New / Java Class... (Новый / Класс Java);
У файлі Ball.java описати об'єкт, що моделюватиме диск:
метод move — переміщення у наступне розташування прямолінійним рівномірним рухом з можливим відбиванням від меж прямокутної області.
Якщо після введення програми з'являться червоні позначки ліворуч, потрібно натиснути лівою кнопкою миші на позначці для вибору підказки. Порівняти з очікуваним.
Внести зміни у код Graphtest.java.
Запровадити такі загальнодоступні властивості класу Graphtest:
public static int w = 360, // ширина прямокутної області h = 360, // висота прямокутної області (без висоти заголовку) r = 10, // початкове значення радіуса круга vmax = 5, // верхня межа початкової швидкості n = 20, // початкова кількість кругів d = 24; // висота заголовку вікна Ball [] ball = new Ball[n];
Примітка. Якщо учень не знає, як розташувати круги без перетинів, він може розташувати круги з перетинами і застосувати процедуру злиття дисків для отримання початкового стану. Але таке відхилення від плану понижує оцінку на 1 бал.
j=0; while ((j<n-1) && (0<n)) { k=j+1; while (k<n) { if (/* умова перетину кругів */) { /* "склеювання" круг */) n--; k--; } k++; } j++; }для обчислення оновлених координад центрів кругів.
Перевірити працездатність програми. У разі потреби змінити код.
Зберегти проект і повідомити вчителя про завершення роботи.
6. Підбиття підсумків уроку
Виставлення оцінок.
7. Домашнє завдання
У разі потреби завершити роботу над програмою. Порівняти з демонстраційним розв'язанням.
Завдання 2. Створити програму «Папуги», в якому є такі персонажі: Рудий Кіт та 6 папуг — по два червоного, жовтого та зеленого кольору. Папуги сидять по колу, їх занумеровано послідовними натуральними числами від 1 до 6. Рудий Кіт — у центрі кола. З інтервалом 3 секунди Кіт називає два різні випадкові натуральні числа у межах від 1 до 6 включно — номери папуг. Якщо ці папуги однакового кольору, нічого не відбувається. Інакше, якщо їхній колір різний, вони змінюють свій колір на один і той самий, який відмінний від кольору їх обох. Зображення знайти або виготовити самостійно.
Текст упорядкував Олександр Рудик.