Динамические эффекты

Предварительная подготовка

Эффекты форматирования

Графические объекты

Движение объектов

Ожившие графики

Другие варианты

Вентильные схемы

Автоматизация тестирования

Автоматизация оценки

Проект "Машина времени"

Игра "Жизнь"

Заполнение аттестатов

На главную

 

Движение
графических объектов

Абсолютное и относительное смещение О пользе глупостей В путь! Сила Мяч Планета
Движение тела, брошенного под углом к горизонту Управление движущимся объектом

Массив точек Именование ячеек и запись формул в естественном виде

Абсолютное и относительное смещение

Если вы управляете смещением графических объектов при записи макроса с помощью клавиш со стрелками или мышью, то ваши действия в виде макроса будут иметь примерно следующий вид:

ActiveSheet.Shapes("Rectangle 1").IncrementLeft 5

‘сдвиг влево на 5 пикселей

ActiveSheet.Shapes("Rectangle 1").IncrementTop -30

‘сдвиг вниз на 30 пикселей

ActiveSheet.Shapes("Rectangle 1").IncrementRotation 3

‘поворот на 3 градуса по часовой стрелке

Для изменения направлений придется поменять знаки.

Во всех этих случаях использовалось смещение относительно последнего положения фигуры (Increment – приращение). Однако этот способ не всегда удобен, особенно тогда, когда движение объекта описывается математически. На этот случай лучше использовать абсолютные координаты и следующий синтаксис:

ActiveSheet.Shapes.Item("AutoShape 4").Left = 100

а можно и проще:

ActiveSheet.Shapes("AutoShape 4").Left = 100

‘абсцисса 100 (в пикселях)

ActiveSheet.Shapes("AutoShape 4").Top = Ye

‘ордината Ye (переменная)

ActiveSheet.Shapes("Group 4").Rotation = u

‘поворот на угол u(в градусах) относительно положения в момент создания.

О пользе глупостей

Макросы, использующие перемещение графических объектов, сразу же после создания ведут себя «не по-джентельменски». Вместо того чтобы плавно пройтись перед вашим взором, объекты, исполняющие главные роли в макросе, застывают в оцепенении и, когда вы уже начинаете терять надежу на возможность изменения ситуации, вдруг прыгают в конечное положение, минуя все промежуточные. Заставить отвлечься от суммирования смещений позволяет включение в макрос, реализующий движение какого- либо дополнительного задания, не связанного с данным графическим объектом. И если в данный момент вам нечего предложить,  допустимы совершенно «никчемные» поручения типа:

Range("A1").Select – выделить и без того выделенную ячейку;

Range("A1").ClearContents – очистить пустую ячейку;

Range("A1").Orientation = 0 – установить горизонтальную ориентацию текста в пустой ячейке;

Range("A1").HorizontalAlignment = xlCenter – выровнять отсутствующий текст по центру. Можете сами пофантазировать на эту тему и выбрать то, что вам по вкусу. Вроде бы и глупость, а помогает.

В путь!

Вставим рисунок автомобиля, затем, включив запись макроса, выделим его и, сместив вправо с помощью клавиатуры, перейдем в ячейку A1. Остановим запись и отредактируем макрос, чтобы получилось следующее:

For k = 1 To 160

  ActiveSheet.Shapes("Picture 1").IncrementLeft 3

  Range("A1").Select

  For t = 1 To Tik / 10: Next t

Next k

Если ваш автомобиль пытается скрыться за правый край сцены, верните его перетаскиванием с помощью мыши.

Сила

В следующем проекте проверим возможность динамического изменения размеров графических объектов. Нарисуем стрелку из набора автофигур и, записывая макрос, потянем ее за правый боковой маркер. Затем отредактируем макрос, чтобы он приобрел следующий облик:

For k = 1 To 20

  ActiveSheet.Shapes("AutoShape 4").ScaleWidth 1.1, 0, 0

  Range("A1").Select

  For t = 1 To Tik: Next t

Next k

Следите за номерами объектов (они, скорее всего, у вас будут совсем другими) и не забывайте давать значение переменной Tik.

Здесь в макросе было использовано масштабирование с коэффициентом 1.1, но можно было бы задать изменение ширины. В этом случае две первые строки предыдущей записи могли выглядеть так:

For w = 30 To 80 Step 3

  ActiveSheet.Shapes("AutoShape 4").Width = w

Изменение высоты имеет следующий синтаксис:

  ActiveSheet.Shapes("AutoShape 4"). Height = w

И ширина, и высота отсчитываются от левого верхнего угла фигуры.

Мяч

Попробуем сочетание двух видов движения: поступательного и вращательного. Нарисуем мячик с полоской, сгруппируем и пустим его по полю с помощью макроса, использующего цикл:

For i = 1 To 200

  ActiveSheet.Shapes("Group 6").IncrementRotation 3

  ActiveSheet.Shapes("Group 6").IncrementLeft 3

  Range("A1").Select

Next i

Это с использованием относительного смещения, а теперь немного математики, и в абсолютных координатах делаем «навесной удар»:

For i = 1 To 200

  ActiveSheet.Shapes("Group 6").Left = i * 2 + 20

  ActiveSheet.Shapes("Group 6").Top = 98 + (i - 100) ^ 2 / 50

  ActiveSheet.Shapes("Group 6").Rotation = i * 3

  Range("A1").Select

Next i

Мяч, в соответствии с законами механики, летит по параболе.

Планета

А как обстоят дела с вращением, если ось проходит не через центр объекта и даже находится за его пределами?

Один из возможных вариантов рассмотрим на простом, но достаточно эффектном примере. Заливкой диапазона изобразим космическое пространство. В центре поместим Солнце. Нарисовав планету, создадим ее копию, для которой выберем: Цвет заливки – Нет заливки, Цвет линий – Нет линий. Удалив планеты на расстояние, равное диаметру орбиты, выделим нашу невидимку и оригинал и сгруппируем. Поместим группу так, чтобы ее центр пришелся на центр Солнца, и запустим макрос:

For u = 0 To 360 * 2 Step 5

  ActiveSheet.Shapes("Group 12").Rotation = u

  For t = 1 To Tik: Next t

  Range("A1").Select

Next u

Если для демонстрации требуется большее число оборотов, множитель в первой строке увеличиваем.

Движение тела, брошенного под углом к горизонту

Задача о моделировании движения тела, брошенного под углом к горизонту, в курсе информатики стала уже классикой. Тем не менее, попробуем внести в решение этой задачи свою лепту, используя предлагаемые анимационные возможности. В результате:

-  тело действительно перемещается в заданной системе координат, причем наглядно изменяется вектор скорости и его горизонтальная и вертикальная составляющие;

-   длину вектора начальной скорости и угол его наклона к плоскости горизонта можно изменять, при этом меняется и траектория полета;

-   как в числовой, так и в графической форме фиксируются координаты максимальной высоты подъема и дальности полета;

-    отражаются текущие параметры движения тела;

-   моменты времени полета можно изменять вручную как  в прямом, так и в обратном направлении, отслеживая текущие параметры.

При разработке этого проекта пришлось решать ряд сопутствующих проблем.

Управление движущимся объектом

Пока тело совершает поступательное или вращательное движение, с описанием этого процесса особых проблем нет, хотя в первом случае отсчет координат ведется  от левого верхнего угла прямоугольника, содержащего объект, а поворот осуществляется относительно центра этого прямоугольника. Даже изменение размеров объектов без поворота не создают дополнительных сложностей. Однако сочетание поворота объекта и изменения его размеров вносит определенные трудности в описание его положения, так как при изменении размеров меняются координаты центра. Так, пытаясь в макросе увеличить длину прямоугольника, повернутого на 90º, вы, к удивлению, обнаружите, что при этом меняются и его координаты.

Для того чтобы разобраться с этим, пришлось провести дополнительные исследования в проекте, о котором упоминалось в разделе Сетка Excel.

Массив точек

В векторной графике отсутствует понятие точка, но это не означает, что в точках нет необходимости. Роль точек с успехом выполняют квадраты со стороной 0,05 см и меньше или овалы такого же размера без границ. Если точки являются действующими «героями» сюжета (например, показывают траекторию движения объекта), то методом копирования и последующей вставкой из буфера обмена необходимо создать массив точек в необходимом количестве. В этом случае с ним несложно управляться в цикле, а все незадействованные точки, чтобы были под рукой, можно «спрятать» под любой из отображаемых точек или фигур.

Именование ячеек и запись формул в естественном виде

Одно из несомненных достоинств MS Excel – богатство математического аппарата, которым не обладает Visual Basic. Поэтому во всех случаях, где можно обойтись без макросов в процессе вычислений, лучше использовать возможности этого приложения. Кроме того, электронные таблицы позволяют ячейкам с данными присваивать собственные имена. Ничто не мешает нам, создавая ту или иную модель, давать ячейкам, содержащим переменные, принятые в физике и математике привычные обозначения. В этом случае формулы будут выглядеть вполне естественным и понятным образом.

На верх

 

Динамические эффекты Предварительная подготовка Эффекты форматирования Графические объекты
&Движение объектов Ожившие графики Другие варианты Вентильные схемы Автоматизация тестирования
Автоматизация оценки Проект "Машина времени" Игра "Жизнь" Заполнение аттестатов

© 2007 Государственное областное образовательное учреждение
"Россошанская школа-интернат для детей-сирот и детей, оставшихся без попечения родителей"