Перенос и анимация геометрических фигур

Задача

Описать на языке программирования Pascal с помощью модуля graph алгоритм переноса и анимации геометрических фигур.

Решение

 

Описание переменных: 

x, y – координаты точки.

Алгоритм решения задачи: 

Точка на плоскости задается координатами x1, y1. При переносе ее положение определяется новыми координатами x2, y2, где
x2 = x1 + dx
y2 = y1 + dy

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

Алгоритм переноса

  1. Установить цвет.
  2. Нарисовать фигуру.
  3. Подождать определенный промежуток времени.
  4. Зарисовать фигуру цветом фона экрана.
  5. Изменить координаты на dx и dy.
  6. Установить цвет.
  7. Нарисовать фигуру.

Используя правила переноса, можно моделировать движение объекта на экране. Для этого необходимо сначала определить направления движения: по горизонтали (для координаты x) и/или по вертикали (для координаты y). Для организации движения используется циклическая конструкция, зависящая от выбранного шага (сдвига).

Алгоритм движения по горизонтали

  1. Задать начальное значение переменной x – значение сдвига по оси.
  2. Пока x меньше конечного значения, выполнять следующую последовательность действий.
    1. Установить цвет.
    2. Нарисовать фигуру.
    3. Выполнить задержку.
    4. Зарисовать фигуру цветом фона экрана.
    5. Изменить значение x на величину сдвига.

Программа на языке Паскаль: 

 

uses graph,crt;
var
    g,h:integer;
    x,y:integer;
begin
    g := detect;
    initgraph(g,h,'');
 
    setcolor(10);
    x:=100;
    y:=200;
    moveto(x,y); lineto(x+300,y); lineto(x+150,y-150); lineto(x,y);
    delay(2000);
    setcolor(0);
    moveto(x,y); lineto(x+300,y); lineto(x+150,y-150); lineto(x,y);
    setcolor(10);
    x:=x+200;
    y:=y+150;
    moveto(x,y); lineto(x+300,y); lineto(x+150,y-150); lineto(x,y);
 
    delay(1000);
 
    x := 0;
    while x < 300 do begin
        setcolor(12);
        rectangle(0+x,400,300+x,450);
        delay(50);
        setcolor(0);
        rectangle(0+x,400,300+x,450);
        x := x + 2
    end;
    setcolor(12);
    rectangle(0+x,400,300+x,450);
 
readln
end.

 

Примечания: 

В основе изменения графической информации лежат три основных преобразования: перенос, поворот и масштабирование. Эти три преобразования позволяют создавать статические и динамические геометрические изображения. При этом при построении графического изображения на экране монитора необходимо помнить, что система координат для графического режима отличается от обычной декартовой системы координат: ось 0Y направлена вниз, ось 0X - вправо, так что начало координат находится в левом верхнем углу экрана.

 

Комментарии

Вот анимация фигур - влево окружность, вниз отрезок, под углом 45° прямоугольник, код моего "производства"
program Animating;
var gd,gm,x,y,i,j,k,l,m,n:Integer;
uses CRT,Graph;
begin
  x := 100;
  y := 100;
  k := 400;
  l := 100;
  m := 600;
  n := 250;
  i := 10;
  repeat
  closeGraph();
  gd := detect;
  initGraph(gd,gm,'');
  line(0,500,1300,500); //поверхность
  circle(x+i,400,100); //окружность
  line(100,y+i,300,y+i); //отрезок
  bar(k+i,l+i,m+i,n+i); //прямоугольник
  delay(100);
  x := x + i;
  y := y + i;
  k := k + i;
  l := l + i;
  m := m + i;
  n := n + i;
  until Keypressed;
end.