Моделирование движения (поворот)
Используя
правила поворота, можно моделировать движение объекта на экране.
Алгоритм движения объекта
относительно заданной точки:
1.
Задать начальное значение угла поворота;
2.
Пока угол меньше или равно конечному
значению, выполнять следующую последовательность действий:
3.
нарисовать объект;
4.
Зафиксировать положение объекта на
экране;
5.
Очистить экран или нарисовать объект
цветом фона экрана;
6.
Изменить координаты объекта, точнее
изменить угол, например alpha:= alpha + dalpha}
Пример 1.
(320, 50) (320, 240) R=190 (a, b)
Рис.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-х треугольников, относительно центра самого
орнамента.