Понедельник, 29.04.2024, 01:39
Приветствую Вас Гость | RSS
Главное меню
Наш опрос
Оцените мой сайт
Всего ответов: 47
Форма входа
Поиск
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0

Графика в Паскале

Моделирование движения (поворот)

Используя правила поворота, можно моделировать движение объекта на экране.

Алгоритм движения объекта относительно заданной точки:

1.     Задать начальное значение угла поворота;

2.     Пока угол меньше или равно конечному значению, выполнять следующую последовательность действий:

3.     нарисовать объект;

4.     Зафиксировать положение объекта на экране;

5.     Очистить экран или нарисовать объект цветом фона экрана;

6.     Изменить координаты объекта, точнее изменить угол, например alpha:= alpha + dalpha}

 

Пример 1.

 (320, 50)

 (320, 240)

R=190

 (a, b)

В данном примере одновременно и моделирование движения (анимация), и поворот объекта. На рис.24 обозначена только одна линия, в программе их будет 3, т.е. исходную линию нарисуем один раз, повернув на 120°, и нарисуем еще раз, повернув на 240°.

 

 Рис.26.

 

setcolor(12);

a:=320; b:=240;     {точка поворота}

x1:=320; y1:=240;    {центр круга, и одновременно точка поворота}

x2:=320; y2:=50; 

x1:=abs(a-x1); y1:=abs(b-y1);

x2:=abs(a-x2); y2:=abs(b-y2); {получилось y2=190, будем использовать как радиус окружности}

{цикл нужен для анимации, будем поворачивать объект каждый раз на 1°}

for alpha:=1 to 360 do

  begin

   line(a+x(x1,y1,-alpha),b-y(x1,y1,-alpha), a+x(x2,y2,-alpha),b-y(x2,y2,-alpha));

   line(a+x(x1,y1,-alpha-120),b-y(x1,y1,-alpha-120), a+x(x2,y2,-alpha-120),b-y(x2,y2,-alpha-120));

   line(a+x(x1,y1,-alpha-240),b-y(x1,y1,-alpha-240), a+x(x2,y2,-alpha-240),b-y(x2,y2,-alpha-240));

{здесь мы используем отрицательный угол, чтобы круг вращался по часовой стрелке. 2-я и 3-я линия добавлены очень просто, их не пришлось заново рисовать и высчитывать для них координаты, для 2-й линии добавили 120°, для 3-й - 240°}

circle(a,b,y2);    {y2 используем здесь как радиус}

delay(10); cleardevice;

{задержку делаем маленькую, чтобы кадры быстро сменялись, а т.к. окружность поворачивается только на 1°, движение получается плавным и не очень быстрым}

end;



Рис.27. Значок BMW


Пример 2.

Поворот орнамента, состоящего из 4-х треугольников, относительно центра самого орнамента.


Рис.28. Фрагмент программы поворота орнамента