Лабораторная работа №7 по предмету «Графическая визуализация».
Выполнил студент второго курса математического факультета Фомин В.Л.
Анимация в SVG
Цель работы: Кривая Безье (пропеллер) вращается вокруг своей оси, и плоскость её поворачивается, при этом происходит изменение цвета.
< ?xml version="1.0" encoding="utf-8"?>
< !DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
< svg width="600" height="400">
< g>
< g>
< g>
< g>
< circle cx="300" cy="200" r="200" />
< animateColor attributeName="fill"
from="yellow" to="red" begin="0s" dur="3s" repeatCount="indefinite"/>
< /g>
< animateTransform attributeName="transform" attributeType="XML"
type="skewX" from="0" to="90" begin="0s" dur="32s" repeatCount="indefinite"/>
< /g>
< animateTransform attributeName="transform" attributeType="XML"
type="scale" from="1, 1" to="0, 0.7" begin="0s" dur="32s" repeatCount="indefinite"/>
< /g>
< animateTransform attributeName="transform" attributeType="XML"
type="translate" from="0, 0" to="200, 30" begin="0s" dur="32s" repeatCount="indefinite"/>
< /g>
< g>
< g>
< g>
< g>
< g>
< path d="M 100, 200 q 0, 120 200, 0" />
< path d="M 100, 200 q 0, -120 200, 0" />
< path d="M 500, 200 q 0, -120 -200, 0" />
< path d="M 500, 200 q 0, 120 -200, 0" />
< path d="M 200, 373.2 q 103.9, 60 100, -173.2" />
< path d="M 200, 373.2 q -103.9, -60 100, -173.2" />
< path d="M 400, 26.8 q -103.9, -60 -100, 173.2" />
< path d="M 400, 26.8 q 103.9, 60 -100, 173.2" />
< path d="M 200, 26.8 q -103.9, 60 100, 173.2" />
< path d="M 200, 26.8 q 103.9, -60 100, 173.2" />
< path d="M 400, 373.2 q 103.9, -60 -100, -173.2" />
< path d="M 400, 373.2 q -103.9, 60 -100, -173.2" />
< animateTransform attributeName="transform" attributeType="XML"
type="rotate" from="0, 300, 200" to="360, 300, 200" begin="0s" dur="2s" repeatCount="indefinite"/>
< /g>
< animateColor attributeName="fill"
from="red" to="blue" begin="0s" dur="4s" repeatCount="indefinite"/>
< /g>
< animateTransform attributeName="transform" attributeType="XML"
type="skewX" from="0" to="90" begin="0s" dur="32s" repeatCount="indefinite"/>
< /g>
< animateTransform attributeName="transform" attributeType="XML"
type="scale" from="1, 1" to="0, 0.7" begin="0s" dur="32s" repeatCount="indefinite"/>
< /g>
< animateTransform attributeName="transform" attributeType="XML"
type="translate" from="0, 0" to="250, 0" begin="0s" dur="32s" repeatCount="indefinite"/>
< /g>
< /svg>
Соответствующий рисунок имеет ширину 800 пикселей и высоту 600 пикселей.
К окружности с центров точке (300, 200) и радиусом 200 последовательно применяются четыре вида анимации:
- animateColor attributeName="fill" from="yellow" to="red" begin="0s" dur="3s" repeatCount="indefinite" - плавное изменение цвета заливки от жёлтого к красному, происходящее в течение 3 секунд и далее повторяющееся;
- animateTransform attributeName="transform" attributeType="XML"
type="skewX" from="0" to="90" begin="0s" dur="32s" repeatCount="indefinite" - искажение по горизонтальной оси от 0° до 90° в течение 32 секунд и далее поторяющееся;
- animateTransform attributeName="transform" attributeType="XML"
type="scale" from="1, 1" to="0, 0.7" begin="0s" dur="32s" repeatCount="indefinite" - сжатие по горизонтальной оси от 1 до 0 и по вертикальной оси от 1 до 0.7 первоначального размера, происходящее в течение 32 секунд и далее поторяющееся;
- animateTransform attributeName="transform" attributeType="XML"
type="translate" from="0, 0" to="200, 30" begin="0s" dur="32s" repeatCount="indefinite" - смещение по горизонтальной оси вправо на 200 пикселей и по вертикальной оси вверх на 30 пикселей, происходящее в течение 32 секунд и далее поторяющееся.
К "вертушке" последовательно применяются пять видов анимации:
- animateTransform attributeName="transform" attributeType="XML"
type="rotate" from="0, 300, 200" to="360, 300, 200" begin="0s" dur="2s" repeatCount="indefinite" поворот вокруг центра на угол 360°, происходящий в течение 2 секунд и далее повторяющийся -
- animateColor attributeName="fill"
from="red" to="blue" begin="0s" dur="4s" repeatCount="indefinite" - плавное изменение цвета заливки от красного к синему, происходящее в течение 4 секунд и далее повторяющееся;
- animateTransform attributeName="transform" attributeType="XML"
type="skewX" from="0" to="90" begin="0s" dur="32s" repeatCount="indefinite" - искажение по горизонтальной оси от 0° до 90° в течение 32 секунд и далее поторяющееся;
- animateTransform attributeName="transform" attributeType="XML"
type="scale" from="1, 1" to="0, 0.7" begin="0s" dur="32s" repeatCount="indefinite" - сжатие по горизонтальной оси от 1 до 0 и по вертикальной оси от 1 до 0.7 первоначального размера, происходящее в течение 32 секунд и далее поторяющееся;
- animateTransform attributeName="transform" attributeType="XML"
type="translate" from="0, 0" to="250, 0" begin="0s" dur="32s" repeatCount="indefinite" - смещение по горизонтальной оси вправо на 250 пикселей, происходящее в течение 32 секунд и далее поторяющееся.
Вывод. Динамическое использование при анимации преобразований поворота, искажения вдоль осей, растяжения (сжатия) вдоль осей, плавного изменения цвета заливки позволяет создать изображение перемещающегося в пространстве предмета, изменяющего свой цвет.
Ссылка на SVG-рисунок
На главную страницу.