Карта сайта   Главная

Список задач (сортировка по темам)

  1. Для просмотра темы следует поставить мышь на номер первой задачи темы.
  2. Для просмотра решения следует ударить мышью по номеру задачи.
  3. В ряде задач в скобках указан раздел из пособия Программирование модификаторов 3ds Max.
ТемаЗадачаСодержание задачи
11Анимация положения текста в HTML-документе средствами JavaScript.
12Вывести, используя линии (точки), прописную букву русского алфавита (А, Б, ..., Я). (Берется буква с номером, равным номеру студента в списке группы.)
Прежняя задача. Анимация цвета, положения и прочих свойств текста и содержащего его контейнера в HTML-документе средствами JavaScript.
23Программирование движения сферы по сторонам прямоугольника.
24Создание и воспроизведение 3ds Max avi-файла в HTML.
2192Дружба. Начальная и конечная вершины соединяются по двум маршрутам разноцветными растущими цилиндрами.
При отображении вершин следовать фильму.
2221Крышка чайника перемещается по дуге, "приземляется" на сферу, стоящую на усеченном конусе, и остается на ней последние 30 кадров анимации.
2222Растущие, убывающие и перемещающиеся прямоугольные параллелепипеды и сферы.
Рост - 25 кадров; пауза - 10 кадров;
смещение в центр - 20 кадров; пауза - 10 кадров;
убывание - 25 кадров; пауза - 10 кадров.
2223Две полусферы с текстурой Checker перемещаются по окружностям, начиная и заканчивая движение в точке [0, 0, 0] (см. фильм). При движении меняется число повторов (tiling) текстуры.
344Анимация вершин объектов Editable_Mesh, Editable_Poly, Editable_Patch и NURBSSurf (разд. 1.9). Для анимации Editable_Patch используется модификатор Morpher (разд. 2.10.3). Уточнение: mr = morpher autoload_Of_Targets:1; addModifier node mr
45Средствами MAXScript на оси Y помещаются N стандартных примитивов (N > 3). Затем N - 3 раз генерируется случайное положительное число, не превышающее число примитивов, и из коллекции Geometry после MessageBox-сообщения удаляется соответствующий примитив (m = random 1 geometry.Count; ...; delete geometry[m]). Решение оформляется в виде функции в двух вариантах: с if и case (разд. 1.1.16).
4172Перекаты. Воспроизвести, используя MAXScript, показанную сцену (фильм 0.1).
Анимационный интервал устанавливается равным 400 (вместо 100).
animationRange = interval 0f 400f
Число разбиений площадки 4 * 4. Параллелепипеды растут в каждой ячейке. При росте их боковая сторона уменьшается в 4 раза; при убывании восстанавливается.
Площадка задается как плоскость, например:
pln = plane length:120 width:120 pos:[0, 0, 1]
Высота и цвет генерируются случайным образом, например:
bx.wireColor = color (random 0 255) (random 0 255) (random 0 255)
bx.height = random 20 60
где bx - это идентификатор параллелепипеда.
Для оптимизации кода все параллелепипеды можно записать в массив:
delete $*
arrB = #()
for i = 0 to 3 do (
    x = 30 * i - 45
    for j = 0 to 3 do (
        y = 30 * j - 45
        arrB = append arrB (box pos:[x, y, 0] height:20 length:30 width:30 wireColor: (random [0, 0, 0] [255, 255, 255]))
    )
)
56Анимация перемещения объекта, меняющего форму, по окружности. Употребляются следующие выражения MAXScript: if, case, while, for, function, animate, at time, max и др. (разд. 1.1.16).
5134Программирование анимации сферы, перемещающейся в положительном направлении оси X и увеличивающей свой объем в 3 раза, а затем возвращающейся в исходную точку и уменьшающей площадь своей поверхности в 2 раза.
5199Противостояние. Частицы от двух источников летят на встречу друг другу по оси Х, тормозятся при встрече.
Затем после некоторой паузы зеленые частицы выталкивают синие в отрицательном направление оси Х, а затем синие частицы после некоторой паузы выталкивают зеленые в положительном направлении оси Х.
69Программирование анимации параметрических модификаторов Bend, Taper (2 варианта), Twist, Noise, Stretch (2 варианта) и Squeeze (разд. 2.1). Для демонстрации создается форма с кнопками Bend, Taper и так далее. Анимация запускается после нажатия на соответствующую кнопку.
610Программирование анимации параметрических модификаторов Push, Relax, Ripple, Wave, Skew, Slice и Spherify (разд. 2.1). Для демонстрации создается форма с кнопками Push, Relax и так далее. Анимация запускается после нажатия на соответствующую кнопку.
611Программирование анимации параметрических модификаторов Affect Region, Mirror, Displace под управлением Gizmo, Displace под управлением Image, XForm и Shell (разд. 2.1). Для демонстрации создается форма с кнопками Affect Region, Mirror и так далее. Запуск анимации после нажатия на соответствующую кнопку.
614Программирование (без анимации) параметрических модификаторов Lattice, Substitute и Preserve (разд. 2.1). Для демонстрации создается форма.
7111Программирование rollout-секции c радиокнопками выбора фигуры (куб, сфера, цилиндр, конус) и кнопкой вывода фигуры в заданной точке пространства (разд. 1.12.1).
912Перемещение мышкой произвольного блока на странице с двумя или более блоками (JavaScript).
913Перемещение мышкой движущегося блока с его возвратом после освобождения мышки в позицию, предшествующую началу перемещения (JavaScript).
915Цвет div-блока меняется в зависимости от положения мышки, перемещаемой по блоку. Форма курсора - Pointer (JavaScript).
918Выполнить следующие действия:
- вывести оси координат штрих-пунктирной линией;
- вывести, используя GL_LINE_LOOP, правильный пятиугольник;
- в его центре вывести сглаженную точку;
- в его вершинах вывести несглаженную точку;
- внутри пятиугольника вывести лицевую сторону треугольника (использовать draw);
- вывести нелицевую сторону прямоугольника, охватывающего пятиугольник (использовать glBegin / glEnd);
- при выводе треугольника и прямоугольника задать в их вершинах разные цвета.
В процедуре on_key_press предусмотреть следующие действия:
- вывод осей координат сплошной линией;
- отказ от интеполяции цветов;
- вывод лицевой стороны в виде точек, а нелицевой в виде ребер;
- отказ от сглаживания точки;
- возврат к исходной сцене.
Замечание. Вместо пятиугольника группа А-13 выводит окружность; А-16 - правильный семиугольник; А-14 - правильный девятииугольник.
Прежняя задача. Задачи на последней лекции.
Прежняя задача. Построение таблицы с произвольным числом строк и столбцов и с обработчиком onClick, изменяющим цвет ячейки (JavaScript).
1043Разрушение Editable_Poly-плоскости по ребрам (фильм 18.11). Использовать следующие polyop-методы: getEdgesUsingVert, getVertsUsingEdge, getElementsUsingFace, deleteEdges и detachFaces.
1063Создание 3d-поверхности по известному растровому образу с употреблением аффинных преобразований и операций Extrude Faces (разд. 2.16.1), Bevel Faces (разд. 2.6.3) и Connect (разд. 2.16.3), а также модификатора TurboSmooth (разд. 2.8.3).
1117Формирование (программирование) 3d-поверхности вращения на основе плоского сплайна (разд. 2.7.7, модификатор Lathe).
1219 Выводятся, применив GL_QUAD_STRIP, лицевые стороны двух смежных прямоугольников.
Вершины общей стороны имеют Z-координату, равную нулю.
Z-координата прочих вершин меньше нуля (угол между четырехугольниками не более 120 градусов).
Проецирование выполнить, повернув изображение на 30° относительно оси X и на 10° относительно оси Y.
(см. рис. в http://100byte.ru/python/pyglet_gl/pyglet_gl.html#q3)
Задаются материал, источник света и рассчитываются нормали к граням.
Вывод осуществляется с использованием освещенности (после нажатия на 1) и без нее (после нажатия на 2).
Вывести нормали к граням в виде линий (по одной нормали к грани).
В вершинах, в которых отображаются нормали, вывести сглаженные точки.
Пример без точек см. на http://100byte.ru/python/pyglet_gl/pyglet_gl.html#q3 (изображение с двумя нормалями).
Рассчет нормалей см. http://100byte.ru/python/pyglet_gl/pyglet_gl.html#p8 после рис. 15.
import numpy as np
n = np.cross(a, b) # Векторное произведение
n = n / np.linalg.norm(n) # Нормализация
или
n = n / np.sqrt(np.sum(n**2)) # Нормализация
А-14-18 вместо двух прямоугольников выводит GL_TRIANGLE_FAN - веер треугольников (в веере не менее 3-х треугольников). Z-координата общей вершины веера равно нулю. Z-координаты прочих вершин меньше нуля.
Прежняя задача. Поиск и отображение пути в таблице с препятствиями между двумя ячейками посредством лучевого или волнового алгоритма (JavaScript).
12201Лучевой алгоритм. Код для начала задачи 182.
arrClss = #('Sphere', 'Teapot', 'Cylinder', 'Cone', 'Tube', 'Torus', 'Box', 'Pyramid')
arrCnt = #()
for clss in arrClss do (
    cnt = 0
    for obj in geometry do if classOf obj == clss do cnt += 1
    append arrCnt cnt
)
mx = amax arrCnt
indMX = 0
for k = 1 to arrClss.count do (
    if arrCnt[k] == mx do (
        indMX = k;
        exit
    )
)
clssMx = arrClss[indMX]
for obj in geometry do if classOf obj != clssMx do delete obj
1320Создание кода, выводящего координаты вершины 3D-модели объекта (Editable_Mesh, Editable_Poly, Editable_Patch, NURBSSurf, Editable_Spline, NURBSPointCurve) в разных системах координат (разд. 1.9, 2.10.8 и 2.10.10).
1445Анимация перемещающегося пропеллера (разд. 1.13).
1449Нарисовать дугу (примитив Arc) между двумя случайно выбранными вершинами сферы (угол между векторами v1 и v2 вернет выражение acos(dot (normalize v1) (normalize v2))).
1455Программирование анимации размещения букв на сторонах куба.
14152Вычислить площадь треугольника по известным координатам его вершин.
14195Полетаем. Использовать Link, Group (для лопастей) ProBoolean.
Анимация создается для одного пропеллера. Прочие получаются копированием.
14205Воспроизвести показанный в фильме рисунок. Замерить, а затем вычислить длину отрезка, соединяющего точку Po окружности радиуса R с точкой Pe окружности радиуса R + ho при заданном угле между отрезком и осью x. Вычисления выполнить в декартовой системе координат с началом в точке Po. Центры обеих окружностей расположены в точке Pc указанной на рисунке системы координат. Пояснение: известны R, ho, координаты точек Pc и Po в указанной на рисунке системе координат и угол α.
Сравнить замеренную и вычисленную величины.
При построении принять α = 30°.
157На распутье. Объект перемещается по траектории до распутья, где нужно выбрать одну из трех траекторий. Длина анимационного интервала - 200f, а время, потраченное на выбор, равно 60f. В это время объект увеличивает свой объем, а затем приобретает исходную форму. Выбор осуществляется случайным образом. Выбранный участок подсвечивается, и объект возобновляет движение по выбранному участку.
1521Программирование анимации с ограничением Path_Constraint при выборе в качестве пути сплайна, а затем NURBS-кривой (см. стр. 62, 88, 150 и 236 пособия. Программное добавление ключей. Пример кода: pc = path_Constraint(); ... addNewKey pc 30; pc.Percent.Keys[2].Value = 60
1553Программирование разнонаправленного движения меняющей цвет сферы по меняющему размер эллипсу (разд. 2.1.18, пример кода см. в задаче № 21).
1576Kiss. Две сферы разнонаправлено перемещаются по окружности, а третья сфера - по прямой, проходящей через центр окружности и начальную позицию двух первых сфер. После встречи движение сфер приостанавливается и после небольшой паузы две первые сферы взрываются, а третья возвращается назад.
15121Программирование разнонаправленного движения объекта по эллиптической траектории с использованием ограничения Path_Constraint (разд. 2.1.18, пример кода см. в задаче № 21).
15142Встреча. Два растущих объекта (применяется модификатор PathDeform WSM, разд. 2.10.10), встречаются и после нескольких попыток разойтись, возвращаются к своим исходным размерам.
15146С промежутком в 50f в начале пути (окружности) появляются сферы разного цвета. Каждая сфера проходит путь за 50f и останавливается. В конце пути сферы располагаются на окружности с некоторым интервалом.
15148Пошептались. По пути, похожему на синусоиду, навстречу друг другу перемещаются 2 сферы. Первая использует карту Checker, а вторая - Marble (tiling-параметры карт равны 4). Изначально сфера с картой Checker вращается, а с картой Marble - нет. После встречи сферы на некоторое время замирают, а затем начинают движение вспять. При этом вращается сфера Marble, а сфера с картой Checker перемещается без вращения. Базовая точка каждой сферы (свойство pivot) помещается вне сферы недалеко от случайно выбранной вершины сферы.
1756Подобрать материал, обеспечивающий интерполяционную заливку полигона (см. рис. 8)
1788Создание анимации телевизионной заставки с использованием динамической bitmap-карты, направленного источника света с динамической projectorMap-картой и объемного света.
1789Программирование анимации телевизионной заставки с использованием динамической bitmap-карты, направленного источника света с динамической projectorMap-картой и объемного света.
17135Заливка невыпуклого многоугольника.
17157Подарок. На сторонах куба поочередно воспроизводятся разные материалы (употребляется карта bitmapTexture).
17161Истина. Треугольники, залитые разными материалами, перемещаются на периферию и открывается скрытый ими образ.
17162Чайник.
17163Большой чайник.
17164Шахматы.
17165Бокал.
17166Бокал "Красное и белое".
17167Бокал "Красное и белое" с вином.
17168Бокал на черном.
17169Бокал "Загадка".
1822 Записать в файл, используя Python-программу, эпизод симуляции перевернутого маятники (длина эпизода не менее 100 кадров), а затем графически отобразить эту симуляцию.
Прежняя задача
Анимация мячика, прыгающего по ступенькам (разд. 2.16, фильм 4.10).
1823Движение игрушечного автомобиля по дороге с кочками (для задания неровностей применяется модификатор Wave, разд. 2.1.10).
1825Задача №16, или 22, или Применение модификатора reactor (одежда и мягкое тело, разд. 2.16.1 - 2.16.3).
1891Анимация дрожащего листа средствами reactor с употреблением ограничения Point_Point (разд. 2.16).
1893Программирование анимации колокола средствами reactor с употреблением ограничения Rope (разд. 2.16).
1926Создать плоскость с числом сегментов 5х5 и с размерами 100х100. Увеличить Z-координату каждой вершины плоскости, номер которой кратен 4, на величину, случайно выбранную из диапазона 30 - 40 единиц. Уменьшить Z-координату каждой вершины плоскости, номер которой кратен 5, на 30 единиц. Удалить вершину с наименьшим положительным смещением. К полигонам с номерами 4 и 5 применить модификатор Twist. Результат анимируется (разд. 1.9).
1927В форме имеется таблица с M * N ячейками и три кнопки разного цвета. После нажатия на кнопку часть ячеек таблицы (не более 10 %) закрашивается цветом нажатой кнопки. Положение закрашиваемых ячеек определяется случайным образом. Процесс может продолжаться, пока имеются нераскрашенные ячейки (JavaScript).
1928Перемещение. В сцене случайным образом размещаются N сфер со случайно выбранным цветом. Радиус сфер случайным образом берется из диапазона 15 - 18 единиц. Поместить группы пересекающихся сфер и оставшиеся одиночные сферы в вершинах правильного M-угольника, где M - это число групп пересекающихся и одиночных сфер. Результат анимируется.
1929Три объекта перемещаются по пути в виде чередования спусков и подъемов. Обеспечить ускорение движения объекта при прохождении спуска и замедление при подъеме.
1930В сцену вводятся три сферы. Используется стандартный материал с диффузионной картой Checker. Базовая точка каждой сферы перемещается в случайно выбранную вершину полигональной модели объекта. Обеспечить поворот каждой сферы на угол, случайно выбранный из диапазона 360 - 720 градусов, вокруг ее базовой точки и одновременное перемещение сфер по незамкнутому сплайн-пути. В момент t = 0 сферы равномерно распределены по пути следования.
1931В сцену вводятся 8 примитивов Box с достаточно большим числом полигонов. Цвет примитива выбирается случайным образом из значений [135, 110, 8] и [6, 135, 113]. Применить к нижней половине примитива первого цвета модификатор Bend, а к верхней половине примитивов другого цвета - модификатор Twist. Результат анимировать, меняя во времени параметры модификаторов и положение их габаритного контейнера Gizmo.
1932По пути, созданному в виде NURBS-сплайна, перемещаются 3 объекта, меняя свой цвет в следующих последовательностях: "красный - синий - зеленый - красный", "синий - зеленый - красный - синий" и "зеленый - красный - синий - зеленый" соответственно для первого, второго и третьего объектов.
1933Создать из четырех сфер модель системы Звезда - Планета - Спутник Планеты - Спутник Спутника. В модели Звезда вращается вокруг своей оси. Для Звезды используется стандартный материал с диффузионной картой Checker. Планета вращается вокруг Звезды по эллиптической траектории. Спутники перемещаются по окружностям. Наблюдение ведется из камеры, расположенной на положительной части оси Z, вращающейся вокруг этой оси и направленной в центр Звезды.
1934Создать образ "дышащего" куба, применив к видимым сторонам примитива Box модификаторы Displace. Результат анимировать, меняя во времени позицию Gizmo модификаторов. Для выбора граней употребить нужное число раз модификатор Mesh_Select и метод SetFaceSelection.
1935Сформировать на базе цилиндра посредством модификатора Taper стрелу с коническим наконечником. К части наконечника применить модификатор Spherify. Для выбора части наконечника применить модификатор Mesh_Select. Результат анимировать, меняя во времени параметры Amount и Percent соответственно модификаторов Taper и Spherify. Также обеспечить при анимации вращение объекта воруг оси Y. Для выбора граней употребить нужное число раз модификатор Mesh_Select и метод SetFaceSelection.
1936Применить к одной половине примитива Plane модификатор Affect Region, а ко второй - модификатор Displace с планарной картой. Результат анимировать, меняя во времени для модификатора Affect Region положение подобъекта Points и значение параметра Falloff , а для модификатора Displace позицию его Gizmo и значения параметров Length, Width и Strength. Для выбора граней употребить нужное число раз модификатор Mesh_Select и метод SetFaceSelection.
1937Сфера перемещается по пути в виде NURBS-сплайна. При этом геометрия пути и координаты его базовой точки меняются (в начале анимации путь - это прямая линия, в конце анимации - это линия, напоминающая синусоиду. Также во время анимации меняется цвет сферы и ее значение ее радиуса.
1938В таблице с числом ячеек 10х10 случайным образом размещаются N (N > 30) шаров красного, синего и зеленого цветов. Выстроить все шары в три линии, размещая в каждой из них шары одного цвета. Позиция выбранного шара в линии задается мышкой. Ячейка с выбранным шаром меняет цвет и восстанавливает его после перемещения шара в указанную позицию (JavaScript).
1939В сцене случайным образом размещаются N цилиндров с цветом, случайно выбранным из трех цветов. Радиус и высота цилиндров случайным образом берутся соответственно из диапазонов 5 - 8 и 30 - 60 единиц. Расположить цилиндры одного цвета в вершинах синусоидальной линии произвольного цвета. Число вершин в линии равно числу располагаемых на ней цилиндров. Применить к цилиндрам первой линии модификатор Bend, к верхней части цилиндров второй линии - модификатор Spherify, а к нижней половине цилиндров третьей линии - модификатор Push. Результат анимируется.
1940Конусы. В сцену вводится куб и случайным образом N конусов (N > 4), радиусы оснований и высота которых случайным образом выбираются соответственно из диапазонов 5 - 8 и 30 - 60 единиц. Расположить 4 конуса с наименьшими высотами в вершинах верхней стороны куба, направив высоту каждого конуса к центру куба. Прочие конусы разместить в вершинах расположенной перед кубом линией, упорядочив конусы по высоте. Число вершин линии равно числу размещенных на ней конусов. Результат анимируется. (Фильм 17.14 или 7.13 конкурса MAXScript-анимация).
Сортировка массива конусов выполняется функцией qsort, использующей, например, функцию cmpH (см. ниже).
Пример быстрой сортировки конусов по высоте:
-- Вспомогательная функция - параметр функции qsort
fn cmpH v1 v2 = (
    dH = v1.Height - v2.Height
    case of (
        (dH < 0.): -1
        (dH > 0.): 1
        default: 0)
)
delete $*
-- Создаем массив из 10 конусов с различной высотой
arrCn = #()
for k = 1 to 10 do append arrCn (cone radius1:10 radius2:0 height:(random 30 60) pos:(random [-80, -80, 0] [80, 80, 0]))
-- Сортируем, используя функцию cmpH, массив конусов по их возрастанию высоты
qsort arrCn cmpH
-- Печатаем высоту конусов отсортированного массива
for k = 1 to 10 do print arrCn[k].height
2041Освоение интерактивных методов анимации свойств и координат объектов: анимация радиуса сферы; анимация позиции, угла поворота и коэффициента масштабирования; ограничение Path_Constraint (разд. 1.16.1, 2.1.18, 2.10.10); анимация цвета; анимация MeshBomb; анимация свободной и направленной камер; пример из Dynamics.
2042Программирование анимаций, показанных в фильме 2 (разд. 1.11, 1.14 и 1.16).
2052Программирование анимации часов.
20176Выстрел. Сфера выдвигается в отрицательном направлении оси Х из открывающегося куба и взрывается на 75-м кадре (всего в сцене 100 кадров).
20178Время. Маятник в крайних положениях генерирует частицы. В конце анимационного интервала маятник разрушается. (Использовать связывание объектов.)
20179Постригли и нагнули. В вершинах плоскости устанавливаются конусы. Далее верхушка конуса усекается, а конус наклоняется. Усечение и наклон конуса анимируются. Плоскость имеет 36 вершин.
Для усечения конуса употребить модификатор Slice, а для наклона - Bend.
2148Программирование анимации вертолета, поражающего цель (разд. 1.13 и 1.16). Модель вертолета создается интерактивно без программирования. Пример кода для mesh-бомбы:
bm = bomb strength:0.05 gravity:-0.1 detonation:35 minFragmentSize:1 maxFragmentSize:10 spin:15 pos:bx.Pos chaos:5
bindSpaceWarp bx bm
где bx - идентификатор разрушаемого объекта.
2161Программирование анимации роста superSpray-кактусов с употреблением составного объекта Mesher и модификатора Bend (разд. 1.7 и 2.1.1.
2167Создание анимаций вихря (Super Spray и Vortex), кольца частиц вокруг сферы (Super Spray, BlobMesh и Scatter) и лучей частиц (Super Spray, Mesher и Scatter на сфере).
2170Программирование shapeMerge-анимации звезды на сфере с употреблением источника света, линзы и атмосферного эффекта Volume Light.
21198Оружие пролетариата. Использовать SuperSpray, ShapeMerge, Mesher, преобразование в EditablePoly, Spherify (для части объекта), Bomb, свойство opacity создаваемых материалов, модификатор Noise и пр.
21208Исход. В первом фильме употребляются куб, Loft, PArray и ShapeMerge.
Во втором - плоскости как отражатели UDeformers, PArray и ShapeMerge.
При создании ShapeMerge-объекта следить за ориентациями плоскостей и форм (окружностей).
2254Программирование анимации разрушения чайника одновременно средствами MeshBomb и PArray совместно с PBomb (фильм 4.5). Замечание. В обоих случаях установить время взрыва на 25-м кадре и использовать Spin.
2257Программирование анимации разрушения чайника при его соударении с плоскостью и программирование последующей анимации сборки чайника из полученных при его разрушении фрагментов. Пример кода для реверсирования ключей анимации: frPC = frM.Pos.Controller; supportsTimeOperations frPC; reverseTime frPC animationRange #incLeft #incRight. Замечание. В текущем семестре программируется только разрушение чайника; сборка добавляется интерактивно.
2259Программирование анимации заполнения емкости (куба) blizzard-частицами с использованием отражателей.
22159Пусть сильнее грянет кризис. Средствами PArray и Mesher банкнота делится на фрагменты и выполняется их анимация.
22196Равновесие. Использовать SuperSpray и Mesher.
Все действия выполнить для одной пары объектов (Mesher и Cylinder); прочие добавить копированием.
Для согласования положений частиц и нависающего цилиндра в его в анимационную кривую можно добавлять дополнительные ключи, например:
z_posCntrl = $.pos.controller.z_position.controller
addNewKey z_posCntrl 12
а также управлять касательными в ключевых точках, например:
$.pos.controller.z_position.controller.keys[1].outTangentType = #linear
$.pos.controller.z_position.controller.keys[1].outTangentType = #fast
2360Воспроизведение огня средствами системы частиц PArray и VideoPost (событие Image Filter c фильтром Lenz Effects Glow).
2424Анимация тумана: туман сгущается, а затем исчезает.
2468Создание анимации объемного тумана (Volume Fog) и света (Volume Light).
2469Создание shapeMerge-анимации с употреблением источника света, снабженного линзой (Star Lens Effects, дома програмируется анимация сплайна и линзы Star).
2471Создание анимации огня, взрыва и дыма с употреблением атмосферного эффекта Fire Effect и сферического помощника SphereGizmo. При создании дыма применяется система частиц Particle Flow с оператором Script_Operator, в котором частицы заменяются SphereGizmo.
2479Анимация объемного света, освещающего надпись на плоской поверхности.
24113Программирование анимации дыма. При создании дыма применяется система частиц Particle Flow с оператором Script_Operator, в котором частицы заменяются SphereGizmo.
2572Моделирование движения гусеницы технического средства при помощи решателя Spline IK Solver.
25149Snake. Модель змеи создается средствами Spline IK Solver и Skin, а также при помощи spacePathDeform.
2673Моделирование стеклянных изделий средствами стандартного материала и карты Falloff.
Прозрачность обеспечивается следующим материалом:
flF = falloff color1:black color2:white type:2
flF2 = falloff color1:black color2:[185, 185, 185] type:1
std = standard diffuseMap:flF opacity:30 opacityMap:flF2 specularLevel:90 glossiness:30 soften:0.1 showInViewport:true diffuseMapEnable:true opacityMapEnable:true.
Для создания тени вводится источник света, в котором свойство castShadows имеет значение true.
2678Программирование анимации ландшафта местности средствами материала Multimaterial (разд. 2.9.1) и карты Gradient Ramp.
2684Программирование прозрачного изделия средствами стандартного материала и карты Falloff с употреблением источника света, создающего тень.
26115Анимация диффузионной компоненты материала Multimaterial (Multi/Sub-Object) с ID = 1 (выполняется на примере сферы, всего Multimaterial содержит 2 материала).
26186Красный квадрат. Полосы разного цвета последовательно приобретают красный цвет. Использовать Multimaterial (Multi/Sub-Object).
26197Бездействует графин хрустальный. Использовать Lathe, Multimaterial (Multi/Sub-Object), ID материала, копирование объектов.
Для обеспечения прозрачности можно употребить приведенный в задаче 73 код.
2774Воспроизведение сферы с различными наборами групп сглаживания (разд. 2.6.6).
27114Воспроизведение сферы с модифицированными нормалями.
2875Моделирование колебаний мембраны динамика средствами управляющего элемента Audio Position.
2880Анимация полета бабочек средствами управляющего элемента Noise Float и системы частиц Blizzard.
2881Анимация мигающих лампочек при помщи управляющего элемента Float Expression.
2882На круге. Лампочки, расположенные на окружности, с некоторым интервалом зажигаются, а затем гаснут в обратном порядке.
2883Программирование с использованием Float Script анимации значения свойства Radius сферы как функции от значения свойства Percent пути, по которому перемещается примитив Box.
28102Связывание параметров (Wire Parameters) конуса и сферы (разд. 2. 3): R = 0.5 * H; Z_Position = 1.5 * H (R - радиус сферы, H - высота конуса, Z_Position - Z-координата центра сферы).
28112В каждом углу квадрата расположена сфера. Каждая сфера дискретно в точках 25f, 50f и 75f меняет число сегментов, радиус и прозрачность. При этом сферы 1 и 3 в каждой точке увеличивают значение параметра в 2 раза, а сферы 2 и 4 уменьшают. Минимальные значения параметров: Segs = 4; Radius = 5, Opacity = 0.12. В точке 100f сферы восстанавливают начальные значения измененных свойств.
28138Красный квадрат. Первоначально полигоны плоскости имеют черный цвет, затем в процессе анимации они в случайно выбранном кадре меняют цвет и сохраняют его в течение 10 кадров. Далее полигон принимает красный цвет. (Применяется контроллер point3_expression, управляющий свойством diffuse компонента материала multimaterial.)
30104Прыгающий на плоскости мячик с контроллером Scale_Reactor, обеспечивающим сжатие мячика при его соударении с плоскостью.
30105Связь объектов посредством контроллера Position_Reactor, обеспечиающая движение второго объекта по сторонам прямоугольника при движении первого объекта по прямой.
3177Построение модели лодки средствами составного объекта Loft (Get Path, Make Symmetrical отключен, деформация Fit по Y, деформация Fit по X, Get Shape в Path = 0, TurboSmooth и Relax).
3185Создание средствами Loft подушки (используется деформация Fit) и анимации объема подушки.
3186Создание средствами Loft ложки (используется деформация Fit).
3187Создание вазы и лодки. Употребить:
1. FFDCyl (только для вазы) с использованием преобразования Scale и составного объекта Boolean (разд. 2.1.12, фильм 10.4).
2. FFDCyl (только для вазы) с преобразованием в Editable Mesh и удалением вершин на верхушке.
3. Loft (для вазы и лодки).
Завершить модель добавлением Shell и TurboSmooth.
3146Создание пуговицы средствами ProBoolean.
31194Надавили. Использовать Loft.
3290Анимация шторы средствами модификатора Cloth (разд. 2.15).
32120Анимация скатерти и флага средствами модификатора Cloth.
32155Десерт на полусфере. Результат обеспечивается модификатором Cloth.
32173Мячик падает на полотно из хлопка.
3394Соединение анимаций двух Biped средствами Motion Flow и Mixer.
3395Употребление модификатора Skin; в качестве костей берутся компоненты Biped (разд. 2.10.1). Biped с целью упрощения помещается в созданную из цилиндров оболочку.
3396Программирование Footstep-анимации Biped (разд. 2.10.1, Biped шагает, затем бежит и вслед прыгает).
33191Анимация Biped в режиме Footstep.
33171Анимация Biped с помощью Dummy.
33213Реализовать, используя Biped, три упражнения из комплекса Тайцзицигун.
Примеры: Программирование контроллеров Biped. Управление Biped с помощью Dummy.
3547Комета. Имитируется хвост кометы. Используется система частиц PF_Source с material_Dynamic со стандартным материалом, имеющим карту particle_Age.
3550Монету, лежащую на плоскости, накрывает песок. Употребляются Find_Target, particleInteger, Shape_Facing.
3551Песочные часы.
3562Четыре цвета. Движущиеся вниз черные кубические частицы, генерируемые из одной точки, после достижения плоскости z = 0, расщепляются на 4 потока, направленных вдоль положительных и отрицательных направлений осей x и y. При этом в каждом потоке частицы имеют разную форму: либо форму сферы, либо конуса, либо чайника, либо цилиндра. Кроме того, в каждом потоке частицы приобретают "свой" цвет, а чайники - вращение (фильм 19.8, для задания цвета частиц использовать материал multimaterial, канал useMtlIndex и метод setParticleMtlIndex).
Часть кода Script Operator:
on ChannelsUsed pCont do (
pCont.usePosition = true
pCont.useSpeed = true
pCont.useShape = true
pCont.useMtlIndex = true)
...
pCont.particleSpeed = [0.05, 0, 0]
pCont.particleShape = tp.mesh
pCont.particleSpin = (angleAxis 0.1 [0, 0, 1])
pCont.setParticleMtlIndex i 2
где tp = teapot radius:5
В событие добавляются операторы Script Operator и Material Static, которому назначается созданный в программе материал multimaterial.
Код, порождающий расщепление в примере с двумя событиями, см. в задаче 185.
3564Кольцо заполняется частицами, вылетающими из чашки (используются тесты Age_Test и Find_Target, фильм 18.12).
3565Передвинули. Разветвляющийся на 3 потока BlobMesh-PFSource перемещает стоящее на пути препятствие.
3592Одномоментно рождаются и двигаются вниз с некоторым спином 50 красных частиц разной формы (цилиндр, конус, сфера и чайник). При достижении порогового возраста цилиндрические, конические и сферические частицы останавливаются, частицы с формой чайника приобретают зеленый цвет и разлетаются, сохраняя спин, в разные стороны (использовать в первом событии script_Test, а во втором - keep_Apart).
35103Воспроизведение текста в виде растущих частиц цилиндрической формы. Решаются два варианта: а) частицы на ребрах текста (с одним событием); б) частицы равномерно распределяются по тексту (сетка частиц, два события). (В текущем семестре решается только вариант "а".)
35106Имитация дыма на основе системы частиц Particle Flow с употреблением сил Gravity, Wind и Drag.
35107Интерактивное создание снежинки на основе системы частиц Particle Flow.
35108Интерактивное создание снеговика на основе системы частиц Particle Flow.
35133Частицы, влетающие в отверстие коробки.
35136Первоначально черные кубические частицы генерируются со случайно заданным спином по периметру квадрата и в его углах. В момент времени T частицы, расположенные в углах квадрата, приобретают форму сферы и меняют цвет на синий. Далее эти частицы порождают вертикально движущиеся частицы зеленого цвета.
35137Одномоментно генерируется 10 частиц. Частицы перенимают форму сферы радиуса 12 и равномерно размещаются по окружности радиуса 60. Применить material_Frequency с тремя материалами в multimaterial с картами checker, marble и bricks. Для наглядности обеспечить вращение частиц вокруг оси z. Управление частицами выполнить средствами script_Operator, а их рождение - средствами birth_Script.
35139Красная звезда. На плоскости поочередно появляются звезды. Первоначально каждая звезда имеет зеленый цвет, затем приобретает желтый, а вслед красный цвет, а затем исчезает. В конце в центре сцены остается одна красная звезда.
35140Туман. Из тумана на сторонах квадрата появляются цилиндры. Когда туман рассеивается, цилиндры начинают перемещаться к центру квадрата и заканчивают движение на окружности, центр которой совпадает с центром квадрата, а радиус существенно меньше длины стороны квадрата.
35141Буква О. Вращающиеся сферические частицы падают вниз, располагаясь в конечном счете на траектории в виде буквы О. Достигнув траектории, они меняют свой цвет, приобретая форму буквы О.
35143Время. В системе Daylight на плоскости воспроизводятся часы, показывающие время системы Daylight (Daylight вводится в сцену интерактивно, прочие элементы сцены и анимация создаются программно). Для отображения времени используется система частиц PF Source. Для получения времени можно употребить функцию timeFromSolarTime (см. справку по 3ds MAXScript).
35144Рыба, работая хвостом, удаляется от начальной точки вдоль отрицательного направления оси Х, а затем возвращается в начальную точку (и так 2 раза). В точке с наименьшей Х-координатой рыба пускает 2 пузыря (рыбий рот закрыт), а при возвращении в начальную позицию рыба приоткрывает рот (для генерации пузырей применить систему частиц PF Source, для придания толщины модели головы рыбы можно употребить модификатор Shell, полость рта закрасить розовым цветом, а границу полости рта - белым).
35145Вращение. В центре сцены размещен куб. С интервалом в 30f на окружности генерируются 6 кубических вращающихся частиц. Затем с тем же интервалом они поочередно замещаются пирамидальными частями куба и небольшими сферами. В конце сцены части куба с тем же интервалом возвращаются на свои начальные позиции, а частицам возвращается их начальная форма (применяется система частиц PF Source).
35147Возвращение. Кубические частицы красного цвета покидают исходную территорию, двигаясь в положительном направлении оси Х. Достигнув другой территории, они останавливаются и меняют цвет на желтый. После паузы они становятся зелеными и начинают движение в обратном направлении. Добравшись до исходной территории, они вновь останавливаютя и приобретают исходный цвет.
35150Имитация печати конуса.
35154Игрушка. Пирамида создается из разноцветных частичек (употребить Find_Target и Material_Frequency).
35156Time. Маятник, покидая крайнюю позицию, инициирует появление частиц. Для имитации маятника можно употребить Bones.
35158Энтропия. Из фрагментов собираются конус и сфера, стоящая на вершине конуса.
35160И пир веселый им не в пир. Сцена реализуется системами частиц, операторами SpeedByIcon и составными объектами BlobMesh. Как вариант: Script_Operator содержит код для распределения частиц по окружности и изменения их формы.
35174Алфавит. Генерируются 26 частиц, принимающих форму букв английского алфавита.
Траектория частиц формируется по действием вихря Vortex.
Для создания буквы можно употребить следующий код (на примере буквы "A"):
txt = text text:"A" size:30
addModifier txt (extrude amount:5)
Для генерации алфавита можно употребить bit.intAsChar.
35177Полетели. Из опускающихся верхней и двух передних граней куба вылетают частицы.
Отделение грани выполняется после преобразования в Editable Poly, например:
bx = Box width:25 length:25 height:25
bx = convertToPoly(bx)
bx.EditablePoly.SetSelection #Face #{6}
bx.EditablePoly.detachToElement #Face keepOriginal:off
move bx.selectedFaces [-40, 0, 0]
Частицы создаются источником Super Spray и отклоняются ветром Wind.
35180Испарение. Частицы в форме тора летят вниз.
Достигнув плоского препятствия, они приобретают форму куба и разлетаются по плоскости препятствия, но через некоторое время они приобретают форму сферы и начинают двигаться вверх.
35181Проникновение. Частицы генерируются на сторонах окружности. Задерживаются на 30 кадров на первом препятствии. Затем летят ко второму, где и останавливаются. По ходу движения частицы меняют форму и цвет.
35182Приводимый ниже код создает объекты разных классов ('Sphere', 'Teapot', 'Cylinder', 'Cone', 'Tube', 'Torus', 'Box' и 'Pyramid').
Написать программу, которая
  • Выводит число созданных объектов каждого класса.
  • Оставляет в сцене объекты одного класса, число которых не меньше числа объектов любого иного класса.
  • Сортирует оставшиеся объекты
    • в случае сферы, чайника и цилиндра по radius;
    • в случае тора, трубы и конуса по radius1;
    • в прочих случаях по высоте.
  • Размещает их без пересечений на оси X, начиная с позиции [-40, 0, 0].
Использовать коллекцию geometry, метод classOf, фунцию amax, быструю сортировку qsort.
Пример употребления qsort см. в задаче 40.

-- Создает объекты разных классов
fn crtSP n knd = (
    for k = 1 to n do (
        ps = random [-50, -50, -50] [50, 50, 50]
        r = random 3 7
        h = random 4 8
        case knd of (
            1:(sphere radius:r pos:ps)
            2:(teapot radius:r pos:ps)
            3:(cylinder radius:r pos:ps height:h)
            4:(cone radius1:r radius2:0 height:h pos:ps)
            5:(tube radius1:r radius2:(r + 2) height:h pos:ps)
            6:(torus radius1:(r + 7) radius2:r pos:ps)
            7:(box length:h width:h height:h pos:ps)
            8:(pyramid width:h depth:h height:h pos:ps)
        )
    )
)
delete $*
arrN = for k = 1 to (random 7 8) collect random (-3 + k) 9
-- nSp, nTp, nCyl, nCn, nTb, nTr, nBx, nPr
for k = 1 to arrN.count do crtSP arrN[k] k
35183Чаша полна. Частицы, сдуваемые ветром, покидают источник и заполняют чашу.
Используются сила Wind и тест Find Target.
35185Встреча. Два луча из частиц после встречи порождают 8 лучей с формами Hedra и Torus_Knot.
Можно употребить Collision и Script Operator.
Пример Script Operator, направляющего частицы по осям X и Y и меняющего их форму:
on ChannelsUsed pCont do
(
     pCont.useTime = true
     pCont.useSpeed = true
     pCont.useShape = true
)
on Init pCont do
(
    if spM == undefined do (
        sp = sphere radius:3
        global spM = sp.mesh
    )
    if tpM == undefined do (
        tp = teapot radius:3
        global tpM = tp.mesh
    )
    if clM == undefined do (
        cl = cylinder radius:3 height:6
        global clM = cl.mesh
    )
    if cnM == undefined do (
        cn = cone radius1:3 radius2:0 height:6
        global cnM = cn.mesh
    )
)
on Proceed pCont do
(
    count = pCont.NumParticles()
    for i in 1 to count do
    (
        pCont.particleIndex = i
        k = mod i 4
        pCont.particleSpeed = case k of (
            0:[0.01, 0, 0]
            1:[-0.01, 0, 0]
            2:[0, 0.01, 0]
            3:[0, -0.01, 0]
        )
        pCont.particleShape = case k of (
            0:(spM)
            1:(tpM)
            2:(clM)
            3:(cnM)
        )
    )
)
35188Я протаял гляделку в морозном узоре. Площадка заносится частицами. Затем в ее центре образуется незанятая частицами область. (Без программирования.)
35232Расщепление. Кубические частицы падают вниз. После достижения плоскости Z = 0 расщепляются на 4 потока, меняют цвет, перенимают форму чайника и двигаются по осям X и Y. После перемещения на заданное расстояние начинают двигаться вверх. Пример кода см. в задаче № 185.
35234Четыре формы. Частицы разной формы, вращающиеся вокруг оси Z, поочередно появляются в точках, расположенных на сторонах прямоугольника. После перехода в другое событие они меняют цвет, направление вращения и начинают разбегаться по оси Y.

Замечание. Длину анимационного интервала следует увеличить до 250 кадров: animationRange = interval 0f 250f

Контрольные вопросы:
  • Преобразование координат при переходе от мировой системы координат в систему координат видового порта.
  • Алгоритм определения принадлежности точки невыпуклому многоугольнику.
  • Алгоритм заливки невыпуклого многоугольника.
  • Алгоритм Брезенхема (обоснование).
  • Назначение тестов в системе частиц Particle Flow. Привести 2 примера использования тестов.
  • Изменение направления движения и скорости частиц (операторы Speed, Spin, Script Operator, Force; тесты Collision, Script Test, Find Target).
3797Использование делегатов (Delegates) в Crowd с моделями поведения Seek, SurfaceArrive, PathFollow и Avoid. Приводятся 3 варианта решения: а - Seek и Avoid; б - Seek, SurfaceArrive и Avoid; в - PathFollow и Avoid. В каждом варианте делегаты ассоциируются с геометрическими объектами, например, с цилиндрами.
3798Использование Biped (двуногий) в Crowd с моделями Wander, PathFollow и Avoid. Приводятся 2 варианта решения: а - Wander и Avoid; б - PathFollow и Avoid.
37153Песочница. Вращающиеся кубики не могут выбраться за пределы песочницы. Используются объекты (помощники) Crowd, Delegate и Grid, поведение wallRepel, а также ассоциация делегатов с кубиками (фильм 18.15).
Примеры программирования Crowd см. на crwd.html
Вариант создания сетки и поведения:
arrGrd = for k = 1 to 4 collect grid length:200 width:200 grid:10
wRpl = wallRepelBehavior repelGrids:arrGrd repelMethod:1 repelDirection:2
useDistance:on innerDistance:30 outerDistance:40 falloff:0 showDistance:off
3899Анимация элементов системы Ring Array с использованием в качестве дочерних элементов иных объектов 3ds Max (Sphere, Teapot и др.).
38100Анимация в системе Sunlight управляющих элементов Solar_Time и Solar_Date в сцене с цилиндром, стоящим на плоскости (для каждого элемента создается самостоятельное решение).
38101Анимация в системе Daylight управляющих элементов Solar_Time и Solar_Date в сцене с цилиндром, стоящим на плоскости (для каждого элемента создается самостоятельное решение).
39109Программирование контроллеров Biped (реализация простого движения двуногого, пограммирование AxeKick, BackKick и бегущего Biped).
40110Разбиение объекта по атомам с применением системы частиц Particle Cloud для формирования атомов.
41116Применение различных стилей формирования UVW-координат средствами модификатора Unwrap UVW для сферы и ее верхушки.
41117Создание плоской, нормальной и раскрывающей разверток (Flatten, Normal и Unfold Mapping) сферы средствами модификатора Unwrap UVW.
41118Анимация UVW-координат областей UVW-карт, созданных средствами модификатора Unwrap UVW.
41119Создание с использованием MAXScript плоской развертки (Flatten Mapping) сферы средствами модификатора Unwrap UVW.
42122Синусоида. Источник частиц движется по синусоидальной траектории, оставляя такой же след, но иного цвета, на неподвижной плоскости. Используется система частиц PF Source с двумя событиями и отражателем POmniFlect в тесте Collision первого события. Во втором событии частицы меняют цвет и форму.
42123Наждак. Имитация заточки шила. (Используется система частиц PF Source с одним событием, содержащим в том числе оператор Script_Operator, добавляющий в сцену частицы при приближении шила к наждаку.)
42124Сизифов труд. Сферический камень закатывается на возвышенность, но каждая попытка завершается неудачей из-за столкновения с внезапно возникающим препятствием.
42125На кубе. Частицы появляются на ребрах куба, удаляются от его центра, возвращаются на прежние позиции и исчезают. (Используется система частиц PF Source с тремя событиями. В первом событии частицы рождаются на ребрах куба и разлетаются под действие бомбы. Частицы покидают первое событие, когда возраст первой частицы достигает указанного значения. Это обеспечивается тестом Script_Test. Во втором событии вектор скорости частиц меняет направление на противоположное, кроме того, частицы меняют форму и цвет. Частицы покидают второе событие, когда возраст первой частицы достигает указанного значения. Это также обеспечивается тестом Script_Test. В третьем событии частицы меняют форму, цвет и удаляются по мере достижения заданного возраста. Последнее обеспечивается оператором Script_Operator.)
42126Рулетка. Шарики покидают цилиндрическую нишу под действием вращающейся крестовины. (Используются средства reactor. Для получение бокового отверстия употреблена булевская операция вычитания. Вращение обеспечивается мотором, а фиксация оси вращения - ограничением PointToPoint).
42127Притяжение. Бабочки выбирают красный цветок. (Бабочка создается из цилиндра и двух эллипсов, преобразованных в Mesh. Колебательные движения крыльев обеспечиваются контроллером Noise Float: nFlt = noise_float seed:k frequency:0.1 fractal:true noise_strength:2; llps.Rotation.Controller.Z_Rotation.Controller = nFlt, где llps - это ссылка на Mesh, отображающее крыло. Сцена обеспечивается средствами Crowd с поведениями Wander и Surface Arrive. Количество делегатов (бабочек) не менее 10. Наблюдение ведется анимированной направленной камерой.)
42128Проникновение. Движущиеся части объекта постепенно проникают сквозь находящееся на их пути препятствие, но тормозятся на втором. (Используются система частиц PArray, три бомбы с различным временем детонации и несколько отражателей с различными значениями параметра TimeOff.)
42129На NURBS. Окружность радиуса R преобразовывается в NURBSCurveshape. Каждая контрольная точка кривой смещается на величину [random 0 R, random 0 R, random 0 R]. В сцену вводятся сфера и цилиндр. Сфера помещается на кривую в вершину, наиболее удаленную от начала координат. Цилиндр также помещается на кривую в вершину, наименее удаленную от начала координат. В процессе анимации сфера и цилиндр, двигаясь по кривой, меняются местами.
42130Задело. Два связанных эластичной веревкой предмета (сфера и короб) двигаются вниз. На пути веревки находится препятствие в виде бруса. Предметы повисают на веревке, охватившей брус. Более тяжелая сфера тянет короб вверх, пока он не упрется в брус. (Используются средства reactor. В качестве решателя коллекции твердых тел выбирается метод Runge-Kutta).
42131Затащили. Два связанных эластичной веревкой предмета (две сфера) перемещаются под действием сил гравитации и ветра. Большая сфера, двигаясь по синусоидальной траектории, затягивает на плоскость сферу меньшего радиуса. Движение прекращается на краю плоскости. (Используются средства reactor. В качестве решателя коллекции твердиых тел выбирается метод Runge-Kutta. Движение сферы по синусоидальной траектории обеспечивается ветром и ограничением PointToPath.)
42132Теперь не столь опасен. Первоначально в вершинах усеченной сферы появляются иголки красного цвета, затем они замещаются оранжевыми штырями. (Используется система частиц PF Source с двумя событиями. В первом событии иголки размещаются в вершинах усеченной сферы и ориентируются по их нормалям. Координаты нормали к вершине Mesh возвращаются методом GetNormal. Для размещения и ориентации иголок в операторе Script_Operator первого события употребляется свойство ParticleTM. Матрица преобразований координат получается в результате поворота единичной матрицы вокруг осей Y и X (методы rotateY и rotateX), а четвертая строк матрицы определяется значением позиции вершины: m3.Row4 = v.Pos, где v = sph.Verts[k], k - номер вершины, а sph - это ссылка на Mesh усеченной сферы. Частицы покидают первое событие после достижения указанного возраста (применен тест Age_Test). Во втором событии меняется форма частиц и цвет их отображения в видовом порте.)
43184Растровые алгоритмы. Принадлежность точки невыпуклой фигуре, вывод линии, заливка многоугольника.
44151Сделан из фракталов. Используется СИФ-фрактал Fir-2. Полученное bmp-изображение используется в качестве текстуры (фильм 18.14).
44193Реализация СИФ-фрактала средствами C#. СИФ берется из ifs.html по номеру из списка групп на 100byte.ru.
Использовать OpenTK, OpenGL.
(Ранее надо было употребить System.Windows.Forms.PictureBox; пример употребления см. на tsp.html)
4616Улыбка. Создается как сплайн-анимация (можно употребить модификатор xForm или Linked_XForm).
4758Изготовление отчета в Word. Для каждого стиля задать сочетание клавиш.
(Ранее было: Программирование 1С-географической схемы.)
47170 Записать алгоритм поиска в наборе данных MNIST двух самых близких по написанию букв заданного класса.
Ранее было:
Конфигурации Студенты имеет справочники Группы и Студенты, документы Прием, Перевод и Прием большой, регистр сведений Списки групп и отчет Список группы.
Реализовать объекты, обеспечивающие фиксацию экзаменационных оценок, а также создать отчет, показывающий экзаменационные оценки по указанной дисциплине.
47175 Программирование 1С-графической схемы. Алгоритм задачи с циклом (произвольная) отображается в виде блок-схемы с использованием инструментов 1С-графической схемы. Далее пишется код, переводящий блок-схему в линейную схему.
4866Вычислить координаты точки пересечения прямой, проходящей через центр проецирования и точку (x, y, z), с плоскостью XY (см. рис. 2.12 в
Компьютерная графика полигональных моделей.)
Использовать параметрические уравнения прямой:
x* = xt, y* = yt, z* = с + (z - c)t
50190Воспроизвести граф по его xml-описанию. Параметры glOrtho определить, анализируя координаты вершин графа. Добавить в форму кнопки, обеспечивающие вертикальное и горизонтальное перемещение графа.
<?xml version="1.0" encoding="utf-8" ?>
<graph>
 <graphVertex vName = "v1">
  <x>110</x>
  <y>200</y>
 </graphVertex>
 <graphVertex vName = "v2">
  <x>50</x>
  <y>100</y>
 </graphVertex>
 <graphVertex vName = "v3">
  <x>150</x>
  <y>100</y>
 </graphVertex>
 <edge>
  <start>v1</start>
  <end>v2</end>
 </edge>
 <edge>
  <start>v1</start>
  <end>v3</end>
 </edge>
 <edge>
  <start>v2</start>
  <end>v3</end>
 </edge>
</graph>
4866Вычислить координаты точки пересечения прямой, проходящей через центр проецирования и точку (x, y, z), с плоскостью XY (см. рис. 2.12 в
Компьютерная графика полигональных моделей.)
50200 Создать полигональную модель поверхности из нижеприводимого списка и обеспечить:
  • вывод изометрической проекции модели в виде (показываются лицевые стороны):
    • ребер (после нажатия на 1);
    • точек (после нажатия на 2);
    • полигонов, залитых случайно задаваемыми цветами (без интерполяции, после нажатия на 3);
    • полигонов, залитых случайно задаваемыми цветами (с интерполяцией, после нажатия на 4);
  • поворот модели на заданный угол относительно осей X, Y и Z соответственно после нажатия на 5, 6 и 7;
  • возврат модели в исходную изометрическую проекцию после нажатия на 8.
Список геометрических фигур:
  1. Эллиптический цилиндр.
  2. Правильная n-угольная пирамида (n = 7).
  3. Октаэдр.
  4. Половина гиперболического цилиндра с крышками.
  5. Икосаэдр.
  6. Параболический цилиндр с крышками.
  7. Додекаэдр.
  8. Четверть тора (с крышками).
  9. Поверхность (с крышкой), получаемая в результате вращения кривой y = ax2 вокруг оси Y.
  10. 6-угольная призма.
  11. Полусфера с крышкой.
  12. Усеченный конус.
  13. n-угольная пирамида, усеченная наклонной плоскостью (n = 5).
  14. Эллиптический параболоид с крышкой.
  15. Половина однополостного гиперболоида с крышками.
  16. Поверхность, получаемая в результате вращения полупериода графика функции y = asin(x) вокруг оси X.
  17. Эллипсоид.
  18. Половина двуполостного гиперболоида с крышкой.
  19. n-угольная призма, усеченная наклонной плоскостью (n = 6).
  20. Поверхность (с крышками), получаемая в результате перемещения окружности по кривой y = ax2.
Указания:
  1. Модель фигуры и цвета вершин формируются вне on_draw().
  2. Изначально выводится изометрическая проекция объекта.
  3. При выводе 4-угольных граней использовать GL_QUAD_STRIP, а 3-угольных - GL_TRIANGLE_FAN или GL_TRIANGLE_STRIP.
  4. Предусмотреть запись созданной модели в бинарные файлы и загрузку модели из этих файлов.
  5. Используя средства matplotlib, вывести поверхность по ее уравнению; при отсутсвии уравнения вывести полусферу. Пример см. там же.
Пример: Вывод параболоида.
Прежняя задача. Создать средствами C# и OpenGL полигональную модель из разноцветных граней одной из указанных ниже геометрических фигур (студентом выбирается фигура по его номеру в журнале группы).
Повернуть объект вокруг осей Y и X соответственно на 45° и 30°.
Организовать перемещение объекта по наклонной прямой с одновременным вращением вокруг оси Y.
Пример см. в разд. 2.6. Реализация аффинных преобразований в OpenGL
50202Воспроизвести, используя OpenTK, код, приведенный в Компьютерная графика полигональных моделей.
Задача принимается, если даны ответы на следующие вопросы:
1. Преобразование координат в системах компьютерной графики.
2. Назначение матриц Modelview и Projection.
3. Назначение GL.LoadIdentity(), GL.Ortho(...) и GL.Viewport(...).
(Прежде в этой задаче рассматривались свойства грани OpenGL.)
50203 Вывести созданную при решении задачи 200 модель:
  • задавая и используя материал и источник света. Нормализацию нормалей выполнить (а) расчетным путем, (б) указывая glEnable(GL_NORMALIZE);
  • отображая нормали, если флаг их отображения есть Истина (при выводе нормалей активизировать тест глубины);
  • применяя текстуру (образ берется из файла). Расчет координат текстуры на крышке (при наличии) и на поверхности выполняется независимо.
Переход от материала к текстуре (и обратно) выполнить, нажимая на соответствующие клавиши.
Прежняя задача. Воспроизвести, используя OpenTK, четырехугольник, употребляя GL_POINT, GL_LINE и GL_FILL. При GL_FILL применить GL_SMOOTH и GL_FLAT (для вершин задаются разные цвета).
Замечания.
. По умолчанию грань выводится лицевой стороной, если вершины обходятся против часовой стрелки.
2. Для демонстрации нелицевой стороны выполнить, после нажатия на F11 (в случае консоль-проекта), поворот грани на 180° вокруг оси Y.
502042D-примитивы. Свойства примитива "Линия". Этап проецирования.
50206Вывести на прямоугольную грань следующие текстуры:
  1. Checker черно-белая.
  2. Checker цветная.
  3. Из файла.
Текстуру выводить с различным числом повторов, манипулируя ее координатами.
Показать текстуру на обеих сторонах грани, поворачивая ее на 180° вокруг оси Y.
Пример генерации Checker и загрузки текстуры из файла см. в Графика полигональных моделей
50207Вывести, используя OpenTK, несколько смежных четырехугольных лежащих в разных плоскостях граней, задав:
  1. Источник света.
  2. Материал.
  3. Нормали к граням (предварительно они рассчитываются и приводятся к единичной длине).
При выводе отобразить:
  1. Нормали.
  2. Точки в вершинах граней.
  3. Точку в позици источника света.
  4. Результат при задании GL_SMOOTH.
  5. Результат при задании GL_FLAT.
50212Вывести частицы, разбегающиеся от центра видового порта по окружности.
Использовать OpenTK, шейдер. Пример: Щейдер частиц.
50214Доработать форму (рис. 1) так, чтобы она обеспечивала применение материала и текстуры.
50215Вывести куб в GLControl, используя PrimitiveType.Quads, PolygonMode.Fill / Line, применяя различные цвета для граней куба.
Вывести оси и начало координат.
Обеспечить поворот куба относительно осей координат.
Вывести нормали к граням и вершинам куба.
50216Составить алгоритм движения куба по окружности с центром в точке (xc, yc, 0).
Входные данные: центр окружности, радиус окружности, длина ребра куба. Считать, что имеется процедура cube, выводящая куб.
50217Создать форму, обеспечивающую:
- вывод осей координат;
- вывод четырехугольной грани с центром в точке (x0, y0, 0) с интерполяцией цветов и без нее;
- вывод четырехугольной грани с с различными способами вывода лицевой и нелицевой сторон грани;
- перенос грани в точку (x, y, 0) с положительным масштабированием и ее возврат в начальную точку с отрицательным масштабированием;
- вывод четырехугольной грани с использованием разных материалов для лицевой и нелицевой сторон. Отобразить нормали. Предусмотреть вывод в режимах Flat и Smooth;
- предусмотреть возможность поворачивать грань относительно осей ее локальной системы координат и вектора, исходящего из начала локальной системы координат грани, с отличными от нуля координатами.
50218Программирование задачи 216.
50219Воспроизвести вращение куба, поочередно применяя разные способы воспроизведения (см. фильм 219):
  • с двумя поочередно применяемыми материалами. При смене материала меняется направление вращения куба;
  • без материала, но с разноцветными гранями, поочередно используя для граней Fill и Line.
50220Написать алгоритм анимации вращения куба с заданным шагом по углу поворота вокруг вектора с координатами (1, 1, 1), обеспечивающий следующие 4 способа воспроизведения куба:
  • применение материала 1 и вращение против часовой стрелки в первый интервал анимации;
  • применение материала 2 и вращение по часовой стрелке во второй интервал анимации;
  • вращение куба с разноцветными сторонами без использования материалов (режим освещения отключен) в третий интервал анимации (PolygonMode.Fill);
  • вращение куба с разноцветными ребрами без использования материалов (режим освещения отключен) в четвертый интервал анимации (PolygonMode.Line);
Длина интервала анимации 360°.
Для вывода куба используется процедура cube(x, y), где x, y - координаты центра куба.
51Программирование многослойного перцептрона для прогнозирования на временном ряду.
Прежняя задача:
1С-модель БД Оценки.
Ранее было:
Форматирование курсовой работы в Microsoft Word.
51187Разработать конфигурацию "Сессия", позволяющую отображать итоги экзаменационной сессии студентов в разрезе учебных групп. Создать отчет, выводящий итоги указанного экзамена для выбранной группы.
51210Вращение четырех источников частиц (см. фильм).
Прежняя задача:
Расчет среднего времени ожидания трамвая.
На линии курсируют трамваи одного маршрута, например № 32.
Известно:
- расписание движения трамваев, которое задается временем отбытия с начальной остановки маршрута;
- число остановок на маршруте;
- средняя скорость движения трамвая;
- среднее время входа пассажира в трамвай;
- среднее время выхода пассажира из трамвая.
51211Два отражателя. Частички падают на первый, а затем и на второй отражатели, меняя свои форму и цвет.
Прежняя задача:
Реализация 1С-конфигурации Оценки. Пример: 1С:Предприятие 8. Кафедра
528 Часть 1.
  1. Установить Keras и TensorFlow.
  2. Запустить файл mlp0.py.
  3. Внести в программу из mlp0.py следующие изменения:
    • вывести примеры изображений (show_4 = True) из обучающего множества, указывая в заголовке изображения его метку;
    • заменить слой Flatten на слой Reshape и получить решение;
    • отказаться от слоев Flatten и Reshape и получить решение;
    • заменить в первом Dense-слое функцию активации relu на любую иную из http://www.100byte.ru/python/factors/factors.html#p1_3 и получить решение;
    • заменить в model.compile функцию потерь mse на любую другую функцию из http://www.100byte.ru/python/factors/factors.html#p2_3 (кроме sparse_categorical_crossentropy) и получить решение;
    • заменить в model.compile оптимизатор 'Adam' на любой другой из http://www.100byte.ru/python/factors/factors.html#p2_2 и получить решение;
    • добавить еще один слой Dense и получить решение;
    • зафиксировать параметры, обеспечившие лучшую и худшую точность (val_acc), и соответствующие значения точности;
    • результаты оформить в виде отчета; требования к отчету см на http://100byte.ru/python/pyglet_gl/pyglet_gl.html#q6;
    • подготовить ответы на контрольные вопросы (размещены на http://100byte.ru/python/pyglet_gl/pyglet_gl.html#q6).
Часть 2.
Цель - получение максимально высокой точности классификации.
Обучить НС, выполняя следующие действия:
  1. Применить слои Con2D и MaxPooling2D (по одному).
    Пример модели:
    input_shape = (img_rows, img_cols, 1)
    inp = Input(shape = input_shape)
    x = inp
    x = Conv2D(16, kernel_size = 4, padding = 'same', activation = 'relu')(x)
    x = MaxPooling2D(pool_size = 4, strides = 2, padding = 'same')(x)
    x = Flatten()(x)
    x = Dense(units = 32, activation = 'relu')(x)
    output = Dense(num_classes, activation = 'softmax')(x)
    model = Model(inputs = inp, outputs = output)
    model.summary()
    model.compile(optimizer = 'adam', loss = 'mse', metrics = ['accuracy'])
  2. Заменить Con2D на Con1D, а MaxPooling2D на MaxPooling1D.
  3. Ввести в модель раннюю остановку и далее использовать ее повсеместно:
    import keras.callbacks as cb
    callbacks = []
    callbacks.append(cb.EarlyStopping(monitor = 'val_acc', patience = 6))
    history = model.fit(<другие параметры метода fit>, callbacks = callbacks)
  4. В модель НС с Con2D-слоем добавить слои Dropout (два).
  5. В модель НС с Con2D-слоем и Dropout-слоями добавить слой BatchNormalization.
  6. В модели с Con2D-слоем, варьируя слоями, функциями потерь и другими параметрами, увеличить точность классификации на оценочном множестве.
Результаты оформляются в виде отчета. Требования к отчету те же, что и в первой части ЛР.
Замечание. Число эпох должно быть достаточным для приближения к максимально достижимой на текущей модели НС точности классификации val_acc.
Часть прежнего задания.
  1. Запустить программу загрузки MNIST.
  2. Вывести 50 примеров заданной цифры MNIST (5 строк по 10 примеров в каждой). Поочередно выводятся примеры обучающего и проверочного множеств. Выбор цифры выполняется по номеру N в списке группы. Берется цифра: N - 1, если N < 11; цифра N - 11, если N < 21; цифра N - 21, если N < 31.
  3. Вывести обобщенные портреты рукописной цифры MNIST обучающего и проверочного множеств. Обобщенный портрет формируется следующим образом: берутся и суммируются массивы с изображениями заданной цифры на заданном множестве. Тип результата – float32. Результат делится на число примеров цифры в заданном множестве. Полученные данные выводятся в виде изображения. Способ выбора цифры см в п. 2.
Прежняя задача:
Ранее это была задача на JavaScript-анимацию (два варианта).
Вариант 1: расположенная в центре области буква динамически загораживается (открывается) 4-я областями.
Вариант 2: расположенная в центре области буква исчезает (появляется) в результате изменения прозрачности области.
52226 Предусмотреть в модели НС задачи № 8 наличие нескольких слоев Dense, Dropout и BatchNormalization (не более 3-х).
Изменяя модель задачи № 8, можно использовать следующий код:

from keras.layers import Dropout, BatchNormalization
img_rows = img_cols = 28
num_classes = 10
epochs = 120
units = [0, 256, 128] # Если 0, то слоя Dense нет
rate = [0.5, 0.4, 0.3] # Если 0, то слоя Dropout нет
bn = [False, False, False] # Если False, то слоя BatchNormalization нет
...
input_shape = (img_rows, img_cols, 1)
inp = Input(shape = input_shape)
x = Flatten()(inp)
for k in range(3):
    if units[k] > 0:
        if rate[k] > 0:
            x = Dropout(rate[k])(x)
        x = Dense(units = units[k], activation = 'relu')(x)
        if bn[k]: x = BatchNormalization()(x)
output = Dense(num_classes, activation = 'softmax')(x)
model = Model(inputs = inp, outputs = output)
...
Варьируя число слоев Dense, Dropout и BatchNormalization, а также значение коэффициента прореживания rate, найти начальное, промежуточное и лучшее решения.
Начальное решение - это результат обучения нейронной сети без слоев Dropout и BatchNormalization.
В последующих решениях сохраняются Dense-слои начального решения и добавляются слои Dropout и/или BatchNormalization.
Критерий: "точность классификации оценочных изображений".
Число эпох обучения не менее 90.
После завершения обучения запоминать историю обучения и выводить графики обучения.
Можно использовать следующий код:
#
n_model = 1 # Номер модели (указать состав и параметры модели)
#
history = model.fit(...)
#
history = history.history
pathToHistory = 'G:/AM/'
suff = str(n_model) + '.txt'
fn_loss = pathToHistory + 'loss_' + suff
fn_acc = pathToHistory + 'acc_' + suff
fn_val_loss = pathToHistory + 'val_loss_' + suff
fn_val_acc = pathToHistory + 'val_acc_' + suff
with open(fn_loss, 'w') as output:
    for val in history['loss']: output.write(str(val) + '\n')
with open(fn_acc, 'w') as output:
    for val in history['acc']: output.write(str(val) + '\n')
with open(fn_val_loss, 'w') as output:
    for val in history['val_loss']: output.write(str(val) + '\n')
with open(fn_val_acc, 'w') as output:
    for val in history['val_acc']: output.write(str(val) + '\n')
#
def one_plot(n, y_lb, loss_acc, val_loss_acc):
    plt.subplot(1, 2, n)
    if n == 1:
        lb, lb2 = 'loss', 'val_loss'
        yMin = 0
        yMax = 1.05 * max(max(loss_acc), max(val_loss_acc))
    else:
        lb, lb2 = 'acc', 'val_acc'
        yMin = min(min(loss_acc), min(val_loss_acc))
        yMax = 1.0
    plt.plot(loss_acc, color = 'r', label = lb, linestyle = '--')
    plt.plot(val_loss_acc, color = 'g', label = lb2)
    plt.ylabel(y_lb)
    plt.xlabel('Эпоха')
    plt.ylim([0.95 * yMin, yMax])
    plt.legend()
plt.figure(figsize = (9, 4))
plt.subplots_adjust(wspace = 0.5)
one_plot(1, 'Потери', history['loss'], history['val_loss'])
one_plot(2, 'Точность', history['acc'], history['val_acc'])
plt.suptitle('Потери и точность')
plt.show()

Результаты оформить в виде отчета, включив в него для каждого решения:
  • параметры модели (списки units, rate и bn), включая значения batch_size и epochs;
  • описание слоев модели (результат выполнения model.summary());
  • значения точности acc и val_acc для лучшей эпохи и номер этой эпохи;
  • графики историй обучения;
  • имена файлов, в которые сохранена история обучения.
Вопросы для контроля:
  1. Какие данные на входе и выходе нейронной сети, классифицирующей рукописные цифры.
  2. Назначение слоя Dense (Dropout, BatchNormalization).
  3. Как проявляется переобучение.
  4. Критерий качества обучения.
  5. Как повысить качество обучения.
  6. Применить evaluate (predict).
  7. Смысл параметров batch_size и epochs метода fit.
  8. Назначение оценочных и проверочных данных.
  9. Вывести графики обучения заданного решения.
52227 Сравнить результаты обучения нейронной сети на MNIST с применением слоев Conv1D и Conv2D.
(Совместно с Dense-слоями используются либо слои Conv1D, либо Conv2D.)
Для добавления Conv-слоев использовать следующий код:
#
from keras.layers import Conv1D, Conv2D, MaxPooling1D, MaxPooling2D
#
# Dense-слои
use_flatten_reshape = 0 # 0 - без Flatten и Reshape; 1 - Flatten; 2 - Reshape
units = [0, 0, 32] # Если 0, то слоя Dense нет
rate = [0.5, 0.4, 0.3] # Если 0, то слоя Dropout перед слоем Dense нет
bn = [False, False, False] # Если False, то слоя BatchNormalization после слоя Dense нет
#
# Conv-слои
use_conv = 1 # 0 - Conv-слоев нет; 1 - Conv1D; 2 - Conv2D
filters = [0, 32, 16] # Если 0, то слоя Conv1D (Conv2D) нет
rate_conv = [0., 0.4, 0.3] # Если 0, то слоя Dropout перед слоем Conv нет
bn_conv = [False, True, True] # Если False, то слоя BatchNormalization после слоя Conv нет
if use_conv > 0:
    use_flatten_reshape = 0
... Ввод и преобразование обучающих и проверочных данных
... Форма массивов зависит от вида Conv-слоев (см. ниже определение input_shape для слоя Input)
#
# Определяем форму на входе слоя Input
# Оставляем возможность работать без слоев Conv1D и Conv2D
input_shape = ...
# input_shape определяется в зависимости от слоя, следующего за входным
# Если Conv1D, то input_shape = (img_rows * img_cols, 1)
# Если Conv2D, то input_shape = (img_rows, img_cols, 1)
inp = Input(shape = input_shape)
x = inp
if use_conv > 0:
    for k in range(3):
        if filters[k] > 0:
            if rate_conv[k] > 0:
                x = Dropout(rate_conv[k])(x)
            if use_conv == 1:
                x = Conv1D(filters[k], kernel_size = 4, activation = 'relu')(x)
                x = MaxPooling1D(pool_size = 3, strides = 1, padding = 'same')(x)
            else:
                x = Conv2D(filters[k], kernel_size = 4, activation = 'relu')(x)
                x = MaxPooling2D(pool_size = 3, strides = 1, padding = 'same')(x)
            if bn_conv[k]: x = BatchNormalization()(x)
    x = Flatten()(x) # Преобразование элементов обучающего пакета данных в векторы
... Далее следуют слои Dense
... История обучения сохраняется в файлы и отображается на графиках.

Результаты оформить в виде отчета.
Для каждого решения привести:
  • параметры модели, включая значения batch_size и epochs;
  • описание слоев модели (результат выполнения model.summary());
  • значения точности acc и val_acc для лучшей эпохи и номер этой эпохи;
  • графики историй обучения;
  • имена файлов, в которые сохранена история обучения.
Вопросы для контроля:
  1. Какие данные на входе и выходе нейронной сети, классифицирующей изображения.
  2. Назначение обучающих, оценочных и проверочных данных.
  3. Устройство и назначение слоев Dense (Conv1D, Conv2D, MaxPooling, Flatten, Reshape, Dropout, BatchNormalization).
  4. Назначений функции активации.
  5. Смысл параметров batch_size и epochs метода fit.
  6. Различие между evaluate и predict.
  7. Применить evaluate.
  8. Применить predict и вывести список и несколько рисунков неверно классифицированных изображений.
  9. Использовать в модели с Conv1D (Conv2D) слой Reshape вместо слоя Flatten.
  10. Вывести графики обучения заданного решения.
52224 Написать программу создания набора данных зашумленных изображений шести фигур (кривых) в оттенках серого цвета (примеры зашумленных изображений).
Выбор фигур (кривых) выполняется из следующего списка:
  1. Треугольник и треугольник без одной стороны. Варьируются длины сторон, углы треугольника. Удаляемая сторона выбирается случайным образом.
  2. Окружность и половина окружности. Варьируются радиус окружности и угол поворота половины окружности относительно центра окружности.
  3. Эпициклоида x = 3rcost - rcos3t; y = 3rsint - rsin3t (0 ≤ t ≤ 2π)
    и лемниската Бернулли x = asqrt(2)(t + t3) / (1 + t4); y = asqrt(2)(t - t3) / (1 + t4) (-∞ < t < ∞). Варьируется a.
  4. Парабола y = ax2 и половина параболы с x > 0 или x < 0. Варьируются коэффициент a и знак этого коэффициента (|a| < 0.08, например, a = 0.07 или a = -0.07). Выбор между x > 0 и x < 0 выполняется случайным образом.
  5. Один период функции y = atg(bx) и половина периода этой функции с y > 0 или y < 0. Варьируются коэффициенты a и b и их знаки. Выбор между y > 0 и y < 0 выполняется случайным образом.
  6. Ромб и ромб без одной стороны. Варьируются длина стороны ромба и угол ромба. Удаляемая сторона выбирается случайным образом.
  7. Гипербола y = a/x и одна часть гиперболы. Варьируются коэффициент a, знак этого коэффициента и случайным образом выбирается часть гиперболы с y > 0 или y < 0.
  8. Циклоида x = rt - rsint; y = r - rcost (0 ≤ t ≤ 2π) и половина циклоиды. Варьируется r.
  9. Прямоугольник и прямоугольник без одной стороны. Варьируются длины стороны прямоугольника и угол поворота прямоугольника относительно его центра. Удаляемая сторона выбирается случайным образом.
  10. Экспонента y = aebx и часть экспоненты с x > 0. Варьируются коэффициент a и b и их знак коэффициента (|b| < 0.15, например, b = 0.1466 или b = -0.1466)).
  11. Прямая y = ax и пунктирная прямая. Варьируются коэффициент a, знак этого коэффициента, длина штриха и расстояние между штрихами.
  12. Логарифмическая функция y = alog(bx) и часть логарифмической функции с y > 0. Варьируются коэффициенты a и b и их знаки.
  13. Циссоида x = 2at2 / (t2 + 1); y = 2at3 / (t2 + 1)
    и строфоида x = a(t2 - 1) / (t2 + 1); x = at(t2 - 1) / (t2 + 1) (-∞ < t < ∞). Варьируется a.
  14. Трапеция и трапеция без одной стороны. Варьируются длины сторон и углы трапеции. Удаляемая сторона выбирается случайным образом.
  15. Улитка Паскаля x = 2rcos(t) - hcos(2t); y = 2rsint - hsin2t (0 ≤ t ≤ 2π) и половина улитки. Варьируются r и h.
  16. Один период синусоиды y = asin(bx) и половина периода синусоиды с y > 0 или y < 0. Варьируются коэффициенты a и b и их знаки.. Выбор между y > 0 и y < 0 выполняется случайным образом.
  17. Параллелограмм и параллелограмм без одной стороны. Варьируются длины сторон и углы параллелограмма. Удаляемая сторона выбирается случайным образом.
  18. Эвольвента x = r(cost + tsint); y = r(sint - rtcos(t)) (-∞ < t ≤ 0)
    и гиперболическая спираль x = rcost / t; y = rsint / t; (-∞ < t < 0). Варьируется r.
  19. Гиперболический синус y = ash(bx) и часть этой функции с y > 0 или y < 0. Варьируются коэффициенты a и b и их знаки. Выбор между y > 0 и y < 0 выполняется случайным образом.
  20. Сектор и сектор без одного радиуса. Варьируются радиус, угол между радиусами сектора и угол между осью x и первым радиусом сектора.
  21. Правильный пятиугольник и правильный пятиугольник без одной стороны. Варьируются радиус окружности, в которую вписан пятиугольник, и угол поворота пятиугольника относительно своего центра.
  22. Локон Аньези x = 2actgt; y = 2asin2t (0 < t < π)
    и декартов лист x = a(t2 - 1) / (3t2 + 1); y = at(t2 - 1) / (3t2 + 1) (-∞ < t < ∞). Варьируется a.
  23. Один период y = acosec(bx) и половина периода этой функции с y > 0 или y < 0. Варьируются коэффициенты a и b и их знаки. Выбор между y > 0 и y < 0 выполняется случайным образом.
  24. Эллипс и половина эллипса. Варьируются длины осей эллипса и угол поворота большой оси эллипса относительно оси x.
  25. Конхоида Никомеда x = a + bcost; y = atgt + bsint (-π / 2 < t < π / 2) и половина конхоиды. Варьируются a и b.
  26. Правильный шестиугольник и правильный шестиугольник без одной стороны. Варьируются радиус окружности, в которую вписан шестиугольник, и угол поворота шестиугольника относительно своего центра.
  27. Гиперболический косинус y = achbx и часть этой функции с x > 0 или x < 0. Варьируются коэффициенты a и b и их знаки. Выбор между x > 0 и x < 0 выполняется случайным образом.
  28. Астроида x = acost3; y = asint3 (0 ≤ t ≤ 2π) и половина астроиды. Варьируется a.
Во всех вариантах варьируется толщина фигуры (кривой).
Размер изображения – 64 * 64 пикселя.
Число примеров каждой фигуры (кривой) в обучающем множестве равно 600, в проверочном – 100. Нумерация меток изображений начинается с нуля.
Выбор вариантов определяется списочным номером (N) студента: студентом выбираются варианты V1 = N, V2 = N + 1 и V3 = N + 2. Если Vi > 28, то Vi = Vi - 28.
Таким образом, каждый студент формирует примеры для шести классов изображений.
После формирования набора данных выполняется его загрузка, проверка классов на неповторяемость и выводятся по 10 случайно выбираемых изображений каждого класса.
Примеры изображений см. здесь.
52225 Реализация нейронной сети, позволяющей классифицировать созданные в результате решения задачи 224 изображения.
Ищется минимальная архитектура сети, обеспечивающей 100% точности классификации (или близкую к ней).
В качестве начальной нейронной сети можно взять многослойный перцептрон (см. задачу 8).
Другой вариант сети см. здесь.
В программе предусмотреть возможность вывода изображений (по 10 в каждом классе).
Результаты оформить в виде отчета. В отчете привести:
  1. Условие решаемой задачи.
  2. Примеры загруженных изображений (по одному из каждого класса).
  3. Описание (символьное) модели начальной нейронной сети и графики ее обучения.
  4. Описание (символьное) модели нейронной сети с минимальной архитектурой, обеспечивающей ту же точность классификации, что и начальная нейронная сеть, и графики обучения второй сети.
  5. Программы загрузки набора данных, визуализации изображений, создания и обучения НС.
Вопросы и задачи для контроля:
  1. Приемы, использованные при генерации зашумленных изображений.
  2. Требования к набору данных.
  3. Как обосновать значение ИСР_мин (ИСР - индекс структурного различия), применяемого при поиске похожих изображений.
  4. Как выявить похожие изображения.
  5. Вычислить среднее значение ИСР изображений заданного класса в заданном множестве MNIST (обучающем или проверочном).
  6. В заданном множестве (обучающее или проверочное) вывести по 10 случайных изображений каждого класса.
  7. Обучить НС, забирая из обучающего множества 10% данных в оценочное (параметр validation_split):
    model.fit(x_train, y_train, batch_size = batch_size, epochs = epochs, validation_split = 0.1)
    Точность модели оценить затем на проверочном множестве (применить evaluate).
  8. Вывести рисунки неверно классифицированных изображений (использовать predict).
  9. Объединить наборы данных двух полностью отличающихся вариантов и обучить НС для классификации изображений полученного набора данных.
  10. Алгоритм отсечения отрезков Коэна-Сазерленда.
  11. Алгоритм разбиения средней точкой в задаче отсечения отрезков.
  12. Алгоритм отсечения отрезков Кируса – Бека.
  13. Алгоритм центрирования изображения.
52228 Обучить порождающую состязательную нейронную сеть на данных, созданных в результате решения задачи № 224.
Сохранить в файл обученную модель генератора.
Загрузить эту модель в другой программе и выполнить генерацию 50 изображений (пример см. здесь перед рис. 2).
Замечание. Следует перемешать загруженные обучающие данные, применив, например, процедуру random.shuffle():

import numpy as np
lst = [1, 2, 3, 4, 5, 6, 7]
np.random.shuffle(lst)
print(lst) # Возможный результат: [4, 6, 1, 2, 5, 7, 3]

Результаты оформить в виде отчета. В отчете привести:
  1. Описание слоев генератора и дискриминатора.
  2. Параметры метода compile при компиляции дискриминатора и объединенной модели.
  3. Примеры изображений, генерируемых на разных стадиях обучения.
  4. Истории обучения дискриминатора и генератора.
  5. Имя файла сохраненной модели генератора.
  6. Результаты использования загруженной модели генератора для порождения изображений (вывести не менее 50 изображений).
Вопросы для контроля:
  1. Почему рассматриваемая нейронная сеть называется "порождающей состязательной".
  2. Как состязаются генератор и дискриминатор.
  3. Как выполняется обучение порождающей состязательной нейронной сети.
  4. Что на входе и выходе дискриминатора (генератора).
  5. Используемые функции активации. Их графики.
  6. Какими параметрами можно управлять работой генератора.
52229 Сохранить лучшую обученную модель, полученную в результате решения задачи № 227 (модель с Conv2D-слоями).
В новой программе:
  • загрузить сохраненную модель;
  • вывести описание слоев модели (model.summary());
  • выполнить ее оценку (model.evaluate(...));
  • выполнить прогнозирование (model.predict(...)) и вывести 15 рисунков неверно классифицированных рукописных цифр. В заголовке каждого рисунка указать прогноз и истинное значение класса;
  • добавить в загруженную модель слой Dropout;
  • выполнить компиляцию измененной модели с другой функцией потерь, выбирая из следующего списка:
    • mean squared logarithmic error;
    • logcosh;
    • categorical crossentropy;
    • binary crossentropy; использовать метрику categorical_accuracy (см. Замечание 2 в этом разделе);
    • kullback leibler divergence;
    • Poisson;
    • cosine proximity.
  • дополнительно обучить модифицированную модель на 10-и эпохах.
Результаты оформить в виде отчета. В отчете привести:
  1. Описание слоев загруженной модели модели (model.summary()).
  2. Результат evaluate до проведения дополнительного обучения.
  3. Результат predict, включая 15 рисунков неверно классифицированных рукописных цифр, до проведения дополнительного обучения.
  4. Описание слоев измененной модели модели (model.summary()).
  5. Прежнюю и выбранную функции потерь.
  6. Результат дополнительного обучения (acc и val_acc для лучшей эпохи и номер этой эпохи).
  7. Графики обучения.
Вопросы для контроля:
  1. Как сохранять модель (веса модели) в процессе ее обучения при обновлении максимума критерия.
  2. Как загрузить модель (веса модели).
  3. Как изменить загруженную модель.
52230 Разбить заданный класс EMNIST на два класса: прописные буквы и строчные буквы.
Для разбиения прежде вывести 50 изображений заданной буквы и выбрать среди них образцы прописной и строчной буквы.
Далее использовать следующий алгоритм:
Входные данные: номер класса; проверочное множество букв и их метки, let_big - образец прописной буквы и let_small - образец строчной буквы.
Выходные данные: 100 изображений класса "прописные буквы" и 100 изображений класса "строчные буквы".
  1. Начало.
  2. Загрузить проверочное множество букв и их метки.
  3. Сформировать список all_let с буквами заданного класса.
  4. class_big = []; class_small = []
  5. Для i = 0 По длина(all_let) - 1 Цикл
            let = all_let[i]
            d_big = расстояние(let, let_big)
            d_small = расстояние(let, let_small)
            Если d_big < d_small Тогда
                добавить let в class_big
            Иначе
                добавить let в class_small
            КонецЕсли
        КонецЦикла
  6. Вывести по 100 случайно выбираемых изображений class_big и class_small.
  7. Останов.
Подсчитать по картинкам, полученным в п. 6, процент "правильных" букв в каждом классе.
Результат оформить в виде отчета, включив в него индексы и изображения образцов, программу, реализующую приведенный выше алгоритм, результаты п. 6 алгоритма и процент "правильных" букв в кажом классе.
Загрузку x_test, y_test - проверочных данных EMNIST выполнит следующая процедура (img_rows = img_cols = 28):
def loadBinData(pathToData, img_rows, img_cols):
    print('Загрузка данных из двоичных файлов...')
    with open(pathToData + 'imagesTest.bin', 'rb') as read_binary:
        x_test = np.fromfile(read_binary, dtype = np.uint8)
    with open(pathToData + 'labelsTest.bin', 'rb') as read_binary:
        y_test = np.fromfile(read_binary, dtype = np.uint8)
    x_test_shape_0 = int(x_test.shape[0] / (img_rows * img_cols)) # 26000
    x_test = x_test.reshape(x_test_shape_0, img_rows, img_cols)
    x_test = x_test.transpose(0, 2, 1)
    x_test = x_test / 255.0
    return x_test, y_test
Расстояние между буквами let_1 и let_2 можно определить следующим образом:
import numpy as np
dist = np.linalg.norm(let_1 - let_2)
Двоичные файлы EMNIST можно скачать здесь.
52231 Выбрать в проверочном множестве набора данных EMNIST случайным образом букву заданного класса и затем в этом классе найти:
  • наиболее похожую по написанию на нее букву
  • наиболее отличающуюся по написанию от нее букву.
Результат оформить в виде отчете, указав в нем номер класса, индексы и изображения выбранной буквы и найденных букв.
Загрузку x_test, y_test - проверочных данных EMNIST выполнит следующая процедура (img_rows = img_cols = 28):
def loadBinData(pathToData, img_rows, img_cols):
    print('Загрузка данных из двоичных файлов...')
    with open(pathToData + 'imagesTest.bin', 'rb') as read_binary:
        x_test = np.fromfile(read_binary, dtype = np.uint8)
    with open(pathToData + 'labelsTest.bin', 'rb') as read_binary:
        y_test = np.fromfile(read_binary, dtype = np.uint8)
    x_test_shape_0 = int(x_test.shape[0] / (img_rows * img_cols)) # 26000
    x_test = x_test.reshape(x_test_shape_0, img_rows, img_cols)
    x_test = x_test.transpose(0, 2, 1)
    x_test = x_test / 255.0
    return x_test, y_test
Расстояние между буквами let_1 и let_2 можно определить следующим образом:
import numpy as np
dist = np.linalg.norm(let_1 - let_2)
Двоичные файлы EMNIST можно скачать здесь.
522331. Заменить в задаче 225 обучающие данные, на данные, генерируемые ImageDataGenerator.
2. Обучить сверточную нейронную сеть с Conv2D-слоями, созданную при решении задачи № 227, расширив набор данных MNIST изображениями, сгенерированными ImageDataGenerator.
При создании генератора использовать параметры, отвечающие за сдвиги изображения по горизонтали и вертикали (width_shift_range и height_shift_range).
В каждой задаче отчет включить:
  • Описание слоев обучаемой модели нейронной сети.
  • Код создания генератора и обучения модели.
  • Примеры сгенерированных изображений (не менее 30).
  • Результат обучения - лучшую точность классификации оценочных данных и номер эпохи, на которой эта точность получена.
  • В задаче 2 указать результат обучения модели на нерасширенном MNIST.
Рейтинг@Mail.ru