7. А поворотись-ка, сынку! (Поворот в слое)
Давайте рассмотрим еще одну возможность PSP - вращение слоя в собственной плоскости. В PSP вращение слоя (а с ним, конечно, и объекта, в этом слое расположенного) может осуществляться вокруг некоторой точки, называемой центром вращения (Rotation Center), а само действие, задающее вращение, именуется Rotate (Вращать).
Вращение может осуществляться по часовой стрелке или против неё. Угол, на которые поворачивается слой, может меняться при помощи ползунка Rotate в пределах от -360 до 360 градусов; при этом положительные значения угла соответствуют повороту по часовой стрелке. Момент начала и окончания вращения задаются, как и при перемещении, ключевыми кадрами. Таким образом, если мы хотим, чтобы слой сделал два полных оборота против часовой стрелки, надо указать в начальном ключевом кадре угол 360, а в конечном -360 градусов. Если слой должен быть изначально повернут на какой-то угол, отличный от 360, то двух полных оборотов при помощи ползунка получить уже не удастся. К счастью, можно вводить необходимое значение угла поворота непосредственно в поле Rotate. Надо только не забывать, что один каждый полный оборот соответствует 360 градусам и не ошибаться при умножении.360 на необходимое количество оборотов, которое может быть достаточно большим (не знаю, сколько максимум).
По умолчанию центр вращения слоя находится в центре слайда, т.е. имеет координаты 0;0. Заранее приношу свои извинения противникам использования координат в творчестве, но иного способа перенести центр вращения в другую точку, кроме как задать её координаты, я не знаю. Координаты центра вращения задаются значениями по осям X и Y в полях, помеченных Rotation Center. Догадываетесь, что означают значения эти координат? Естественно предположить, что разработчики PSP были последовательны в своем желании сместить координатную сетку в центр слайда и оцифровать оси в процентных значениях от -50 до +50, как это было сделано для перемещения. И тут, как в детских мультиках, самое время выскочить какому-нибудь дятлу и заорать дурным голосом: "Сюрприз!".
Для случая вращения координатная сетка помещается не на слой, а на сам объект и жестко связывается с ним. Это означает, что при перемещении объекта координатная сетка перемещается вместе с ним, а при масштабировании также изменяет свой масштаб. Но давайте не будем сгоряча костерить разработчиков PSP за этот сюрприз, а попытаемся понять их логику - ведь все не так уж плохо!.
Создадим новую презентацию с аспектом 2:1, т.е. выберем в окне New Slide Show (Новая презентация) в качестве Aspect Ratio значение Custom (Пользовательский) и зададим соотношение сторон слайда 2:1. Вставим в презентацию пустой слайд и зададим для него длительность 6с и время перехода 0с. Добавим слой с заливкой белого цвета (по умолчанию). Он, как обычно, займет все поле слайда и будет считаться заданным в масштабе 100%. Все дальнейшие работы мы будем проводить в окне Slide Options (Параметры слайда) на вкладке Effects - Motion Effects (Эффекты - Эффекты движения). Для удобства визуального восприятия происходящего наложим на окно слайда сетку размером 4х4.
Упражнение 1. Работаем только с левым окном. Зададим координаты центра вращения Rotation Center 25;25 как для начальной, так и для конечной позиции. В точке с введенными координатами появится желтый крестик - указатель центра вращения. Менять его местоположение мышкой не удастся - будет двигаться весь объект, а координаты центра вращения изменяться не будут. Попробуйте, потом верните объект на место, щелкнув у Pan (Панорамирование) значок Reset Panning (Сбросить панорамирование). Теперь попробуйте повращать объект при помощи дугообразных стрелок, расположенных по его углам. Видно, что вращение идет вокруг выбранного центра. Верните объект на место, щелкнув у Rotate значок Reset Rotation (Сбросить вращение). И последнее - попробуйте сдвинуть объект так, чтобы центр вращения, сместившись в поле слоя, оставался виден и повращайте мышкой объект. Убедитесь, что местоположение центра вращения относительно контура объекта не изменяется во всех случаях. Вот для чего координатную сетку привязали к объекту - чтобы задав центр вращения, не приходилось переопределять его в процессе перемещения этого объекта!.
Упражнение 2. Уменьшите масштаб нашего объекта - белого прямоугольника до 50%. Установите в правом окне центр вращения также на координаты 25;25. Сравните положение центра вращения у обоих прямоугольников. Он находится точно посередине прямой линии, соединяющий центр прямоугольника и его правый нижний угол. То есть при изменении масштаба центр вращения также смещается. В левом окне, если рассматривать координатную сетку, применяемую для перемещения, центр вращения находится на 12.5; 12.5, а в правом - на 25;25. при уменьшении размера объекта вдвое его собственная координатная сетка также уменьшила (с точки зрения поля слоя) свой размер. Что нам дает знание этого явления? Давайте вернем центр вращения в левом окне на прежнее место, для чего придется ввести координаты 50;50. Центр вращения куда-то пропал? Да нет, просто он совпал с правым нижним углом объекта и оказался перекрыт его внешней рамкой. Попробуйте повернуть объект и увидите, что теперь он вращается вокруг своего угла. Мы уменьшили масштаб вдвое и координатная сетка стала вдвое мельче. Поэтому для возвращения центра вращения на прежнее место нам пришлось указать вдвое большие значения координат. Вообще, если нужно, чтобы при перемещении объекта центр вращения не смещался в окне слоя, то значение координаты в любой (в том числе конечный) момент времени должны вычисляться, как начальные, деленные на масштаб в долях единицы целого, т.е. нужно значение координаты умножить на 100% и поделить на масштаб по соответствующей координате. В нашем примере, когда масштаб стал 50%, координаты должны стать равными (25;25) х 100% / 50% = (50;50). Еще пример. Если центр вращения имел координату Х=25 и мы изменили масштаб до 140%, то новое значение координаты Х будет 25х100/140 = 17.76. А иначе центр вращения "уйдет". Противники использования арифметики, вы еще, как говорится, в теме? Буду рад прочитать о вашем варианте установки центра вращения без применения расчетов.
Итоговое упражнение. Сбросьте все установки в слое в начальное состояние. Наша задача - построить поворот прямоугольника на 90 градусов вокруг точки, расположенной на середине нижней рамки окна слоя, т.е. в точке с координатами 0;50 с его одновременным масштабированием от 25% до 50%. Приведенные ниже расчеты можно не проводить, а пользоваться готовыми результатами. Расчеты приводятся для желающих проверить мои выкладки и, быть может, что-то предложить свое. Вот наша исходная картинка.
Уменьшим прямоугольник в левом окне, показывающем первый ключевой кадр, т.е. начало слайда, до масштаба 25%, для чего введем число 25 в поле, например, Zoom X. Хорошо видно, что наш центр вращения переместился из нужной нам точки, оставаясь на середине нижней стороны нашего прямоугольного объекта (вот он - сюрприз от разработчика в действии!). Зададим и в правом окне, показывающем второй ключевой кадр, т.е. конец слайда, те же координаты центра вращения 0;50, а затем изменим масштаб до 50%, введя в поле Zoom X значение 50. И в этом окне центр вращения оказался на середине нижней стороны нашего прямоугольника, т.е. также сместился вместе с объектом. А теперь повернем прямоугольник в правом окне в нужную нам конечную позицию, для чего введем число 90 в поле Rotate. Как и следовало ожидать, при повороте центр вращения остался на месте.
Попробуем вернуть центр вращения на место, воспользовавшись приведенной выше формулой. В левом окне масштаб 25%, поэтому координаты (0;50) должны быть пересчитаны в (0;50)х100/25=(0;200), т.е. просто умножены на 4. В правом окне масштаб 50%, поэтому новые координаты будут (0;50)х100/50=(0;100), т.е. умножены на 2. Введем найденные значения и проверим, где будут центры вращения.
Все, как и должно было быть. А теперь в обоих окнах надо будет поставить наш объект в заданное положение. Вполне ожидаемо, что центры вращения, привязанные к объектам, также сместятся. Попробуйте предположить, как и куда, а потом выполните перемещение и проверьте результат.
Оказывается, центры вращения ведут себя так, как будто они находятся на конце жесткой палки, торчащей из нашего объекта. Более того, в силу такой аналогии получается, что и на них распространяется наша новая, "измельченная" сетка координат. Т.е сейчас в левом окне координаты центра вращения могут быть определены на основе следующих рассуждений. После перемещения объект получил координаты -37.5;37.5. В "новой" (мелкой) системе координат значения будут вчетверо больше, .т .е -150;150. Тогда координаты центра вращения могут быть определены путем вычитания из старых координат центра вращения новых координат объекта (кто знаком с математикой поймет, что это обычная формула для плоскопараллельного переноса начала системы координат). Итак, получаем (0;200)-(-150;150)=(150;50). Расшифрую. По координате Х от 0 отнимем -150 и получим +150. По координате Y от 200 отнимем 150 и получим 50. Вводим (150;50) и убеждаемся, что центр вращения в левом окне вернулся на место.
Попробуем аналогичным образом получить координаты центра вращения для правого окна. Объект имеет координаты (12.5;-50), но это в терминах сетки координат для перемещения. Для системы координат "вращения" надо сделать пересчет. (12.5;-50)х100/50=(25;-100). Старые координаты центра вращения составляют (0;100), поэтому пересчет даст нам значения (0;100)-(25;-100)=(-25;200). Центр вращения вернулся на место, но объект ушел с финальной позиции. Т.е. формулы работают для построения начального состояния объекта но не работают для конечного. Более того, я (пока?) не нашел сколь-нибудь простого способа определить комбинацию значений Pan и Rotation Center для финальной позиции, когда центр вращения находится вне объекта. Я, конечно, нужный результат подобрал, чтобы вы могли сравнить траекторию полученную нами с требуемой. Для этого достаточно скопировать установки с приведенного рисунка.
А что это значит на практике? Например то, что в подобных случаях не следует привязывать модификаторы к параметрам Rotation Center и Pan, поскольку результат их действия может оказаться неожиданным.
Запомните: При вращении координатная сетка связывается не со слоем, а с объектом и масштабируется вместе с ним.