Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Семестр2_lr.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
1.27 Mб
Скачать

Лабораторная работа 8 Моделирование системы гравитации

Цель работы:

1). Изучить: методы моделирования простейшей системы гравитации в компьютерной графике; вывод данных на консоль вывода в ActionScript 2.0.

2). Создать приложение для моделирования гравитационных свойств ограниченного движения графических объектов.

Порядок выполнения работы:

1. Скопируйте в новый проект классы Main, Graphics2D, Motion и Collision из предыдущей лабораторной работы.

2. Создайте новый класс Gravity, расширяющий класс Collision. Конструктор класса Gravity кроме необходимых для суперконструктора переменных, должен принимать две новые – friction и gravity типа Number.

3. Значение переменной friction ("сила тяготения", замедляющая скорость движения) при вызове конструктора Gravity задайте равным 0.98, а значение gravity ("масса" объекта) задайте пропорциональным его размерам.

4. Создайте новый метод setGravity() для ускорения движения подвижного объекта, вызов которого включите в список обработчика onEnterFrame():

private function setGravity() {

this.object.vy += this.object.gravity;

}

5. Создайте ещё один новый метод setFriction() для замедления движения подвижного объекта по всем направлениям:

private function setFriction() {

this.object.vx *= this.object.friction;

this.object.vy *= this.object.friction;

}

6. Для того, чтобы просмотреть промежуточное значение какой-либо переменной и, например, изменить исходные данные, используйте команду trace() с соответствующим аргументом, например:

trace(this.object.vy);

7. Исправьте методы класса Collision таким образом, чтобы объекты ball после добавления "падали" вниз до столкновения со стенкой объекта bounds и затем "скатывались" до максимально возможного значения _y (рис. 11).

Рис. 11. Объекты ball становятся неподвижными под действием "гравитации"

8. Сохраните и закройте проект.

Контрольные вопросы:

1). Какую роль выполняет переменная friction?

2). Какую роль выполняет переменная gravity?

3). В чём заключается смысл метода setFriction() класса Gravity?

4). Почему происходит спонтанное "выталкивание" одних объектов ball из-под других объектов, даже если они находятся в неподвижном состоянии?

5). Где выводится результат выполнения команды trace()?

Лабораторная работа 9 Моделирование пружинной системы

Цель работы:

1). Изучить: методы моделирования физической системы в компьютерной графике на примере пружинной (колеблющейся с затуханием) системы.

2). Создать приложение для инициирования и управления затухающими колебаниями матрицы изначально неподвижных графических объектов.

Порядок выполнения работы:

1. Создайте новый проект с названием "lab09".

2. Используйте классы Main и Graphics2D из предыдущей работы.

3. Создайте новый метод drawRect() для рисования прямоугольников, принимающий следующие переменные: x, y – координаты верхнего левого угла; width, height – соответственно ширина и высота прямоугольника.

4. В классе Main создайте прямоугольный объект bounds с размерами сцены, закрашивание для которого используйте из предыдущих работ.

5. С помощью двух приведённых ниже циклов создайте матрицу квадратов 5 x 5 размерами 25 пикселей (number – количество элементов матрицы на сторону, size – размер одного элемента, grid – отступ между квадратами):

for (var i = 0; i<number; i++) {

for (var j = 0; j<number; j++) {

var n:Number = bounds.getNextHighestDepth();

var box:MovieClip = bounds.createEmptyMovieClip("box"+n, n);

box.beginFill(0xffffff, 100);

box.drawRect((i-number/2)*(size+grid)+cx, (j-number/2)*(size+grid) + cy, size, size);

box.endFill();

}

}

6. Для управления элементами матрицы напишите обработку методов нажатия и освобождения кнопки мыши на объекте (метод onRelease) и вне объекта (метод onReleaseOutside):

box.onPress = function() {

this.startDrag();

};

box.onRelease = box.onReleaseOutside=function () {

this.stopDrag();

};

7. Создайте новый класс Spring с двумя методами startSpring() и setSpring().

8. Конструктор класса Spring должен принимать три аргумента для старта движения и замедления (по аналогии с конструктором класса Gravity):

public function Spring(target, friction, gravity) {

...

targets.push({target:target, x:target._x, y:target._y});

}

9. Переменные targets.x и targets.y предназначены для сохранения начальных значений координат элементов матрицы.

10. Изменение скорости движения после перемещения элемента системы с помощью указателя мыши (с замедлением) задайте через переменные dx и dy:

var dx:Number = this.object.targets[i].x-this.object.targets[i].target._x;

var dy:Number = this.object.targets[i].y-this.object.targets[i].target._y;

this.object.vx += dx/this.object.gravity;

this.object.vy += dy/this.object.gravity;

11. Необходимо составить метод setSpring() таким образом, чтобы при "оттаскивании" элемента матрицы с помощью мыши и отпускании его, он возвращался на своё место, двигаясь по принципу пружины. Кроме того, все остальные элементы должны получать изменение скорости движения активного элемента и двигаться синхронно ему (рис. 12).

Рис. 12. Синхронное движение элементов пружинной системы

12. Сохраните и закройте проект.

Контрольные вопросы:

1). Для чего используется массив значений targets?

2). Сколько переменных хранит объектная модель массива targets?

3). Зачем необходимо хранение начальных координат элементов системы?

4). Почему при определённых значениях аргументов конструктора Spring происходит спонтанное усиление "раскачивания" пружинной системы?

5). Какое физическое явление можно имитировать данной моделью?

Вопросы для отчёта по лабораторным работам 6-9:

1). Предоставьте листинги классов Collision для лабораторных работ 7 и 8 с объяснением методов checkBalls() и checkBounds().

2). Предоставьте листинг класса Gravity с объяснением решения задачи, поставленной в вопросе 4 для лабораторной работы 8.

3). Предоставьте листинг класса Spring с поясняющими комментариями.

4). Предоставьте листинг класса Graphics2D с описанием всех существующих в нём методов, включая конструктор, а также примеры использования этих методов для рисования графических объектов.