Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Программирование движения объекта




Для того чтобы запрограммировать движение объекта из одной точки в другую, вспомним равномерное движение.

Пусть (x1;y1) – начальная координата объекта, а (x2;y2) – конечная координата.

Направление движения задается вектором (dx;dy) = Нормализация(x2-x1; y2-y1), где

Нормализация(a,b) = (a / sqrt(a^2 + b^2); b / sqrt(a^2 + b^2)).

Таким образом, координаты объекта в момент времени T от начала движения, движущегося со скоростью V по прямой, равны: (xc;yc) = (x1; y1) + (dx;dy) * V * T;

Скорость V измеряется в пиксель/сек, т.е. количество пикселей пройденных объектом на 1 сек.

Когда (xc;yc) станет равно (x2;y2), тогда объект дошел до конечной точки. На практике сравнивать текущие координаты с концом отрезка не корректно, так как промах на 1 пиксель из-за округления, например, отправит наш объект в бесконечное путешествие по прямой. Можно, например, прикинуть время, которое потребуется объекту, чтобы дойти до конца отрезка, поделив длину отрезка на скорость объекта. Условием продолжения движения будет время от начала движения T меньшее времени, которое требуется, чтобы пройти отрезок.

Движение по окружности программируется иначе.

Пусть (x0;y0) – центр окружности движения. Тогда координаты объекта в момент времени T от начала движения, движущегося со скоростью V по окружности, равны:

(xc;yc) = (x0; y0) + R * (cos(V*T); sin(V*T)),

где R – радиус окружности.

В этом случае в отличие от предыдущего V – угловая скорость, т.е. измеряется в радиан/сек.

Практические задания

 

1. Изучить особенности реализации и работы потоков в Java.

2. Доработать программу, созданную в лабораторных работах № 2-4:

1) создать абстрактный класс BaseAI, описывающий «интеллектуальное поведение» объектов по варианту. Класс должен быть выполнен в виде отдельного потока и работать с коллекцией объектов;

2) реализовать класс BaseAI для каждого из видов объекта, включив в него поведение, описанное в индивидуальном задании по варианту;

3) синхронизовать работу потоков расчета интеллекта объектов с их рисованием. Рисование должно остаться в основном потоке. Синхронизация осуществляется через передачу данных в основной поток;

4) добавить в панель управления кнопки для остановки и возобновления работы интеллекта каждого вида объектов. Реализовать через засыпание/пробуждение потоков;

5) добавить в панель управления выпадающие списки для выставления приоритетов каждого из потоков.

Вариант 1

1. Муравьи-рабочие двигаются в один из углов области их обитания (например, [0;0]) по прямой со скоростью V, а затем возвращаться обратно в точку своего рождения с той же скоростью.

2. Муравьи-воины двигаются по окружности с радиусом R со скоростью V.

Вариант 2

1. Пчелы-рабочие двигаются в один из углов области их обитания (например, [0;0]) по прямой со скоростью V, а затем возвращаться обратно в точку своего рождения с той же скоростью.

2. Трутни двигаются хаотично со скоростью V. Хаотичность достигается случайной сменой направления движения раз в N секунд.

Вариант 3

1. Золотые рыбки двигаются по оси X от одного края области обитания до другого со скоростью V.

2. Гуппи двигаются по оси Y от одного края области обитания до другого со скоростью V.

Вариант 4

1. Обыкновенные кролики двигаются хаотично со скоростью V. Хаотичность достигается случайной сменой направления движения раз в N секунд.

2. Альбиносы двигаются по оси X от одного края области обитания до другого со скоростью V.

Вариант 5

1. Грузовые машины двигаются в левую верхнюю четверть области симуляции (т.е. прямоугольник с верхним-левым углом в точке 0;0, шириной/длиной = (w/2;h/2), где w и h – ширина и длина области симуляции) со скоростью V по прямой. Конечная точка движения – случайная точка в пределах этой области. Если машина сгенерировалась сразу в этой области, то она никуда не движется. По прибытии в конечную точку машина больше не движется.

2. Легковые машины двигаются в нижнюю правую четверть области симуляции (т.е. прямоугольник с верхним-левым углом в точке w/2;h/2, шириной/длиной = (w/2;h/2), где w и h – ширина и длина области симуляции) со скоростью V по прямой. Конечная точка движения – случайная точка в пределах этой области. Если машина сгенерировалась сразу в этой области, то она никуда не движется. По прибытии в конечную точку машина больше не движется.

Вариант 6

1. Разработчики двигаются хаотично со скоростью V. Хаотичность достигается случайной сменой направления движения раз в N секунд.

2. Менеджеры двигаются по окружности с радиусом R со скоростью V.

Вариант 7

1. Капитальные дома двигаются (в городах будущего и не такое возможно) в левую верхнюю четверть области симуляции (т.е. прямоугольник с верхним-левым углом в точке 0;0, шириной/длиной = (w/2;h/2), где w и h – ширина и длина области симуляции) со скоростью V по прямой. Конечная точка движения – случайная точка в пределах этой области. Если дом сгенерировался сразу в этой области, то он никуда не движется. По прибытии в конечную точку дом больше не движется.

2. Деревянные дома после генерации начинают двигаться в нижнюю правую четверть области симуляции (т.е. прямоугольник с верхним-левым углом в точке w/2;h/2, шириной/длиной = (w/2;h/2), где w и h – ширина и длина области симуляции) со скоростью V по прямой. Конечная точка движения – случайная точка в пределах этой области. Если дом сгенерировался сразу в этой области, то он никуда не движется. По прибытии в конечную точку дом больше не движется.

Вариант 8

1. Автомобили двигаются по оси X от одного края области симуляции до другого со скоростью V.

2. Мотоциклы двигаются по оси Y от одного края области симуляции до другого со скоростью V.

Вариант 9

1. Студенты двигаются хаотично со скоростью V. Хаотичность достигается случайной сменой направления движения раз в N секунд.

2. Студентки двигаются по окружности с радиусом R со скоростью V.

Вариант 10

1. Юр. лица двигаются в левую верхнюю четверть области симуляции (т.е. прямоугольник с верхним-левым углом в точке 0;0, шириной/длиной = (w/2;h/2), где w и h – ширина и длина области симуляции) со скоростью V по прямой. Конечная точка движения – случайная точка в пределах этой области. Если запись сгенерировалась сразу в этой области, то она никуда не движется. По прибытии в конечную точку запись больше не движется.

2. Физ. лица двигаются в нижнюю правую четверть области симуляции (т.е. прямоугольник с верхним-левым углом в точке w/2;h/2, шириной/длиной = (w/2;h/2), где w и h – ширина и длина области симуляции) со скоростью V по прямой. Конечная точка движения – случайная точка в пределах этой области. Если запись сгенерировалась сразу в этой области, то она никуда не движется. По прибытии в конечную точку запись больше не движется.

 

Вопросы для самопроверки

 

1. Что такое процесс и поток (нить)?

2. Чем определяется порядок передачи управления потокам?

3. Какие есть способы реализации многозадачности в Java?

4. Что необходимо сделать для создания подкласса потоков (подкласса Thread)?

5. Когда запускается на выполнение метод run() подкласса Thread?

6. Какими методами класса Thread необходимо запускать поток на выполнение и останавливать его?

7. Что необходимо сделать для реализации классом интерфейса Runnable?

8. В каких состояниях может находиться поток?

9. Какой поток считается новым, выполняемым и завершенным?

10. В каких ситуациях поток является невыполняемым?

11. Когда возникают исключительные ситуации при работе с потоками?

12. Что такое группы потоков и чем они полезны?

13. Что такое родовая группа потоков и главная группа потоков?

 

 

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...