Тема: створення моделей рівномірного прямолінійного руху об’єкта, руху об’єкта на площині з перешкодами та з вибором шляху мовою Python.
Мета: надати учням приклад створення моделі руху об’єкта на площині з перешкодами мовою Python.
Обладнання: комп'ютери зі встановленими ОС, браузером, середовищем для програмування мовою Python, (дана) інструкція.
Структура уроку
Хід уроку
1. Організаційний момент
Вітання з класом. Перевірка присутності і готовності учнів до уроку. Перевірка виконання домашнього завдання.
2. Актуалізація опорних знань
Порівняти з очікуваним, перейшовши за посиланнями.
3. Вивчення нового матеріалу
Створення комп'ютерної моделі рівномірного прямолінійного руху об’єкта на площині з оминанням перешкод
передбачає:
наявність програми з втіленням завантаження, створення, редагування, подання й опрацювання зображення;
виклик такої програми через певні проміжки часу — див. приклад програмного втілення відображення прямолінійного рівномірного руху об'єкта.
Опрацювання пікселів зображення (плану лабіринту) можна здійснити, використавши частину прикладу коду.
from PIL import Image i = Image.open("gryvna.jpg") i.show('gryvna.jpg') # показ початкового зображення for j in range(i.size[0]//2): for k in range (i.size[1]): c = i.getpixel((j,k)) # інтенсивність кольорів моделі RGB r = int(c[0]) # червоного g = int(c[1]) # зеленого b = int(c[2]) # блакитного b = int(2*b*j/i.size[0]); i.putpixel((j, k), (r,g,b)) i.save("mygryvna.jpg") # збереження спотвореного зображення i.show('mygryvna.jpg') # показ спотвореного зображення g = Image.new('RGB', (100, 100), (0, 128, 0)) g.show("") # показ створеного одноколірного зображення
При наявності у поточній теці файлу gryvna.jpg ця програма створює 3 вікна.
Порядок зліва направо відповідає порядку створення.
Для відображення лабіринту і рухомого об'єкта (зеленого поля з перешкодами жовтого кольору і білого круга на ньому) зручно використати засоби canvas пакунку
tkinter.
Завдання 1. Скласти алгоритм руху об’єкта прямокутним полем з оминанням перешкод (наприклад, відрізків прямих ліній) при таких обмеженнях:
рух можливий лише як зміна абсциси або ординати центра об'єкта на деяку сталу величину s. Інакше кажучи, як стрибок по між сусідніми вузлами деякої ґратки, що розбиває площину на квадрати з довжиною сторони s;
дані про перешкоди в алгоритм можуть надходити лише як відповідь на запит про можлимість руху на відстань s по горизонталі чи вертикалі з поточного розташування;
у початковий момент рухомий об’єкт дотикається до середини лівої межі прямокутного поля;
у кінцевий момент рухомий об’єкт має дотикатися правої сторони поля.
Вхідні дані (розташування перешкод і співвідношення між розмірами поля, об'єкта й величиною стрибка) ґарантують істування розв'язку — відповідної траєкторії руху.
Створений за допомогою конкурсу ідей алгоритм проходження лабіринту у темноті без його схеми порівняти з очікуваним.
Алгоритм (діяти до досягнення правої сторони поля)
Обійти перешкоду, полишаючи її праворуч, і знайти на шляху точку, з якої можна почати рух праворуч або почати обхід іншої перешкоди, розташованої (хоча б частково) правіше від поточної перешкоди. Інакше кажучи, поки не досягнуто правого краю поля або останнього розташування кроку, запам'ятованого на кроці 4, робити таке у кожному розташуванні об'єкта:
запам'ятати розташування у порядку обходу перешкоди;
якщо розташування — правіше від усіх пройдених, тобто абсциса (центра) об'єкта найбільша з усіх досягнутих, запам'ятати його місце у траекторії;
наступне переміщення здійснити у першому з можливих напрямків, заданих такою послідовністю різниць кутових аргументів нового напрямку і попереднього (напрям вимірювання традиційний — проти напрямку руху годинникової стрілки):
Змінити номер стану гри на 2 — об'єкт рухається у «точку відриву» від перешкоди, тобто у розташування з найбільшою абсцисою при обході останньої перешкоди.
Повернутися у «точку відриву».
Очистити пам'ять, відведену на запам'ятовування траєкторії обходу перешкоди.
Перейти до виконання пункту 1.
Примітка. Горизонтальну межу поля потрібно тлумачити як перешкоду при русі полем. Якщо кілька перешкод дотикаються до горизонтальної межі, то вони разом з цією межею утворюють одну перешкоду з точки зору виконавця алгоритму.
Поради щодо програмного втілення:
напрямки руху зручно занумерувати цілими числами 0, 1, 2, 3 відповідно для напрямків →, ↑, ←, ↓;
4. Інструктаж з ТБ
5. Вироблення практичних навичок
Завдання 2. Програмно втілити складений алгоритм руху білого круга прямокутним полем темно зеленого кольору з оминанням перешкод (наприклад, відрізків прямих ліній) жовтого кольору.
Вважати, що існує шлях для квадрата з горизонтальними і вертикальними сторонами, описаного навколо круга. Останнє припущення дає можливість спростити код перевірки можливості руху у певному напрямку за рахунок збільшення кількості виконуваних дій.
Вказівки щодо створення програми
Доповнити код наданням початкових значень змінним розглянутої моделі оминання перешкод. Порівняти з очікуваним.
Програмно втілити прямолінійний рівномірний рух білого круга від середини лівої межі зображення лабіринту до правої межі поверх жовтих перешкод, незважаючи на останні. Перевірити правильність роботи коду. У разі потреби внести зміни у код програми. Порівняти з очікуваним.
Програмно втілити алгоритм оминання перешкод, замінивши відповідним чином вказівку зростання координати. Перевірити правильність роботи коду і для файлу field.png, і для файлу newfield.png. У разі потреби внести зміни у код програми. Порівняти з очікуваним.
6. Підбиття підсумків уроку Для охочих: удосконалити програму — дозволити переміщення центра білого круга у точки з цілими координатами, віддаленими від початкового положення на відстань, що не перевищує s за умови, що при зміні однієї з координат кінцевого розташування на 1 можна отримати точку, віддалену від початкового розташування на відстань, що не перевищує s — див. малюнок, на якому:
Обговорення проблем виконання завдання. Виставлення оцінок.
7. Домашнє завдання
У разі потреби доробити завдання.
При одночасному зростанні s і розмірів подання перешкод така дискретна модель (зі скінченою кількістю розташувань круга) є гарним наближенням неперервної моделі, у якій можливим є довільне розташування круга без перетину з перешкодами з довільним напрямком переміщення на певну відстань. Файл для опрацювання (із зображенням перешкод) може місти істотно більше пікселів, ніж його зображення на екрані монітора.
Іншим наближенням такої моделі є модель з довільним розташуванням круга без перетину з перешкодами, але векторами переміщення з такими координатами:
Якщо сумістити початки векторів, то їхні кінці будуть вершинами правильного 4n-кутника. Кратність 4 кількості вершин вибрано для того, щоб мати можливість рухатися по горозонталі праворуч і ліворуч та по вертикалі вгору й униз. У цьому випадку:
цілі координати відображення фігури будуть наближеннями дійсних значень;
для зменшення кількості виконуваних дій опрацювання пікселів (особливо для великих значень n):
доцільно здійснювати не для кожного напрямку окремо, а для усіх напрямків одночасно у кільці з радіусами обмежувальних кіл r, r + s;
при виявленні пікселя частини зображення перешкоди визначати аналітично найбільші і найменші кутові аргументи напрямків руху, для якого ця перешкода перешкоджає руху у відповідному напрямку;
дані про заборонені напрямки зберігати як список пар початків і кінців інтервалів значень номерів напрямків;
файл із зображеннями перешкод (для опрацювання пікселів) відображати на екрані монітора з істотним зменшенням (щодо розмірів у пікселях).
Для обох моделей алгоритм перевірки можливості руху у певному напрямку вимагає істотного доопрацювання з використанням рівняння прямої на площині.
Текст упорядкував Олександр Рудик.