Простейшие геометрические вычисления; таймеры в PyGame
- Растровая графика: достоинства и недостатки
Три пространства: материальный объект → модель → отображение. Пример из документации работает с пространством отображения (целочисленные координаты и скорость)
- Простейшие приёмы геометрических вычислений:
смена диапазона X∈[a,b] → X'∈[c,d]
расположение точки (x,y) относительно вектора (x1,y1),(x2,y2).
𝜋-Проблема вычисления ориентированных углов. Функция atan2()
Два вида синхронизации времени в PyGame:
pygame.time.set_timer()
Разбор примера
Пояснение относительно отражения мяча при ударе (исходный файл в формате kseg):
C — центр биты, B — центр мяча, O — точка соударения; [OX] — ось OX , l1 — линия соударения, l2 — линия отражения;
Нам известен угол движения мяча <XOV> и угол удара о биту <XOB>
Надо найти угол движения мяча после удара <XOV´´>
<XOV´> - <XOB> = <BOV´´>
<V´OB> + <BOV´´> - <XOV´´> = -<XOV´>
Заметим, что <V´OB> = <BOV´´> = <VOC>
Подставим 2*<BOV´´> из (1) в (2): 2*<XOV´´> - 2*<XOB> = <XOV´´> - <XOV´>
<XOV´´> = 2*<XOB> - <XOV´>, где <XOV´> = -<VOX´> = -(𝜋-<XOV>)
Получаем <XOV´´> = 𝜋-<XOV>+2*<XOB>
Домашнее задание
Прочитать про косое (псевдоскалярное) произведение векторов (например, здесь и здесь
(MCCME). Лежит ли точка внутри многоугольника. В первой строке вводятся три целых числа – N (3≤N≤100000) и координаты точки. Далее в N строках задается по паре целых чисел – координаты очередной вершины простого (непересекающегося, но, возможно, невыпуклого) многоугольника в порядке обхода по или против часовой стрелки. Выведите одну строку: “YES”, если заданная точка содержится в приведённом многоугольнике или на его границе, и “NO” в противном случае.
- рисовать многоугольник
- вводить многоугольник не текстом, а мышью (например, левая кнопка мыши начинает ввод или добавляет очередную точку, правая завершает ввод)
- при перемещении курсора (если многоугольник готов) отображать, лежит ли точка внутри него
генерировать несамопересекающийся случайный многоугольник, а не вводить его мышью (как?)
- Прыгающие шарики. В прямоугольной комнате прыгают два шарика.
- так же, как в базовом примере (просто ударяясь о стены)
- с учётом силы тяжести
- шарики можно ловить мышью (тогда пойманный шарик не движется)
- …и перетаскивать
с учётом соударений друг о друга (вспоминаем физику)
Условные обозначения
— тема по Linux
— тема повышенной сложности
— теоретическое задание
— тема для самостоятельного изучения