Розробка уроку — практичної роботи

Тема уроку: створення програмного проекту, який наочно моделює фізичний процес дифузії двох ідеальних газів із зображеннями молекул різного кольору.

Мета: виробити практичні навички використання засобів мови Ruby і бібліотеки Ruby 2D щодо подійно та об'єктно орієнтованого програмування, придатного для створення наочних моделей динамічних систем.

По завершенню вивчення учень знає і уміє використовувати засоби мови Ruby з використанням бібліотеки Ruby 2D створення наочних моделей динамічних систем.

Обладнання: комп’ютери з встановленими ОС, браузером, середовищем програму­вання мовою Ruby з використанням бібліотеки Ruby 2D, дана інструкція.

Структура уроку

  1. Організаційний етап.
  2. Актуалізація опорних знань.
  3. Інструктаж з ТБ.
  4. Вироблення пратичних навичок.
  5. Підбиття підсумків уроку.
  6. Домашнє завдання.

Хід уроку

1. Організаційний етап
Привітання з класом. Перевірка присутності і готовності учнів до уроку.

2. Актуалізація опорних знань

Статичністьспільність для всіх екземплярів класу.

Назва статичної змінної розпочинається з подвоєння символів @@.

Статичний методметод, що відноситься до всього класу, а не до конкретного представника. Вiн має доступ лише до статичних змінних і методів. Форма опису статичного методу така:

  def self.назва
    …
  end

Конструктор (класу) — метод створення представника класу, який буде застосовано при інтепретації запису:

Назва класу.new

Форма опису конструктора така:

  def initialize(перелік параметрів)
    …
  end

Змінні класу є унікальними для кожного представника класу. Запис їхніх назв розпочинають з одного символа @.

Методи класу відносяться до певного представника класу. На відміну від статичних методів, вони мають доступ до змінних та методів свого представника класу. Форма опису метода класу така:

  def назва (перелік параметрів)
    …
  end

Ruby2D надає можливість працювати з вікнами і зображеннями (перейти за посиланнями і повторити вивчений раніше матеріал).

Дифузія газівце явище взаємопроникнення двох або кількох речовин.

Дифузію спостерігають у газі, якщо цей газ неоднорідний за складом, тобто якщо він складається з двох або більше речовин, концентрації яких змінюються від точки до точки. Процес дифузії полягає у тому, що кожна зі складових суміші переходить із тих частин об’єму газу, де її концентрація вища, туди, де вона нижча. У результаті процесу дифузії у газі концентрація кожної складової стане однаковою в усіх точках простору, зайнятого газом.

Ідеальний газфізична модель, що не передбачає взаємодію між молекулами газу, а тлумачить їх як матеріальні точки.

3. Інструктаж з ТБ
4. Вироблення пратичних навичок


Завдання. Створити програмний проект, який наочно моделює фізичний процес дифузії двох ідеальних газів — сукупностей матеріальних точок, які не взаємодіють між собою, але відбиваються від стінок прямокутної ємності і перегородки, яка у початковий момент розділяє навпіл ємність на дві однакові частини, що містять різні гази. Використати надані зображення молекул і та вертикальної перегородки .

Вказівки до виконання
(розробити у результаті конкурсу ідей)

  1. Завантажити бібліотеку Ruby 2D:

    require 'ruby2d'

  2. Надати значення сталим налаштування:

    $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
  3. Описати клас Ball (м'яч), кожний представник якого зберігає стан окремого диску:

    • описати статичний масив для зберігання даних про всі диски:

      @@array = Array.new

    • описати статичний метод, який повертає статичний масив @@array з усіма збереженими представниками класу:

        def self.all_instances
          @@array
        end
    • описати конструктор класу з такими параметрами:

      • x — координата-абсциса;
      • y — координата-ордината;
      • vx — проекція швидкості на вісь абсцис х;
      • vy — проекція швидкості на вісь ординат y;
      • t — булева змінна для визначення кольору

      і занесенням створеного представника класу до статичного масиву такою вказівкою:

          @@array << self

      При справдженні t використати зображення блакитного кольору, інакше — рожевого;

    • описати метод move зміни координат:

      • рівномірний поступальний рух (сталі прирости координат між оновлен­ням вікна програми) без зіткнення з перешкодою;

      • зміна координат (дзеркальне відбиття від межі перешкод) і проекцій швидкостей (зміна знаку на протилежний для складової швидкості, перпендикулярної межі перешкоди) при зіткненні з перешкодою.

      Передбачити отримання методом параметру для повідомлення про те, чи встановлено перегородку. Для дзеркального відбиття від вертикальної перешкоди скористатися таким співвідношенням:

      x' + x = 2x0,

      де:
      x' — абсциса після відбиття,
      x — абсциса при відсутносні перешкоди і відбиття,
      x0 — абсциса межі перешкоди, від якої здійснено відбиття.
      Аналогічне співвідношення можна записати для горизонтальної перешкоди при заміні абсцис x, x', x0 на ординати y, y', y0.

  4. Описати початковий стан моделі:

    • задати висоту й ширину екрану;

    • створити зображення перегородки посередині вікна програми;

    • використавши оператор циклу, створити диски по одному у випадкових точках з випадковими швидкостями:

      • рожевого кольору — ліворуч від перегородки;
      • синього кольору — праворуч від перешкоди,
    • задати початкове значення true індикатору існування перегородки;

    • надати значення змінній для збереження часу початку роботи:

      time = Time.now
  5. У циклі оновлення екрану update do (приблизно 60 разів на секунду) для класу Ball викликати статичний метод all_instances, що повертає статичний масив @@array з усіма представниками класу, і для кожного представника здійснити таке:

    • якщо час існування перешкоди минув, змінити значення індикатора існування перегородки на false і видалити перегородку;

    • застосувати метод move зміни координат.

    Інакше кажучи, записати відповідні вказівки після такого:

     
      Ball.all_instances.each do |i|
  6. Показати вікно програми вказівкою show.

5. Підбиття підсумків уроку

  1. Що нового дізналися на уроці?
  2. Чому новому навчилися на уроці?
  3. Що сподобалося?
  4. Що не сподобалося?
  5. Який найголовніший висновок уроку?

Виставлення оцінок.

6. Домашнє завдання

  1. У разі потреби доробити проект.
  2. Повторити використане на уроці.
  3. Порівняти зроблене з демонстраційним розв'язанням.
  4. Модифікувати проект: використати дійсні координати.
  5. Модифікувати проект, реалізувавши модель твердих дисків (сфер).

Текст упорядкувала Лісогор Анастасія Анатоліївна, вчитель інформатики cпеціалізованої школи № 88 Печерського району міста Києва, під час виконання випускної роботи на курсах підвищення кваліфікації з 26.03.2018 р. по 30.03.2018 р.