Написать программу, которая рисует восьмиугольник, движущийся по экрану - Turbo Pascal
Формулировка задачи:
Написать программу, которая рисует восьмиугольник, движущийся по экрану
Решение задачи: «Написать программу, которая рисует восьмиугольник, движущийся по экрану»
textual
Листинг программы
- uses crt, graph;
- const
- N = 8;
- side = 40;
- dFi = pi / 180;
- FiLim = 2 * pi / N;
- sideColor = 3;
- pause = 20;
- type
- top = record
- x, y: integer;
- end;
- var
- tops: array[1..N] of top;
- FiCur: real;
- i, lineY, lineX: integer;
- graph_device, graph_mode: integer;
- procedure shift;
- var
- bufTop: top;
- i: integer;
- begin
- bufTop.x := tops[N].x;
- bufTop.y := tops[N].y;
- for i := 1 to N - 1 do
- begin
- tops[i + 1].x := tops[i].x;
- tops[i + 1].y := tops[i].y;
- end;
- tops[1].x := bufTop.x;
- tops[1].y := bufTop.y;
- end;
- procedure paint(color: word);
- var
- i: integer;
- begin
- setcolor(color);
- if color = sideColor then line(0, lineY, lineX, lineY);
- for i := 1 to N do
- if i <> N then line(tops[i].x, tops[i].y, tops[i + 1].x, tops[i + 1].y)
- else line(tops[N].x, tops[N].y, tops[1].x, tops[1].y);
- end;
- procedure recount;
- var
- i: integer;
- begin
- tops[1].x := round(tops[N].x + side * cos(FiCur));
- tops[1].y := round(tops[N].y - side * sin(FiCur));
- for i := 2 to N - 1 do
- begin
- tops[i].x := round(tops[i - 1].x + side * cos(FiCur + (i - 1) * FiLim));
- tops[i].y := round(tops[i - 1].y - side * sin(FiCur + (i - 1) * FiLim));
- end;
- end;
- procedure rotate;
- begin
- delay(pause);
- paint(black);
- FiCur := FiCur - dFi;
- recount;
- paint(sideColor);
- end;
- begin
- FiCur := FiLim;
- graph_device := detect;
- InitGraph(graph_device, graph_mode, '');
- lineX := GetMaxX;
- lineY := GetMaxY * 3 div 4;
- tops[N].x := 150;
- tops[N].y := lineY;
- recount;
- for i := 1 to N do
- begin
- repeat rotate until FiCur <= 0;
- paint(black);
- FiCur := FiLim;
- shift;
- end;
- closegraph;
- end.
Объяснение кода листинга программы
- В программе используется библиотека crt и графический модуль graph.
- Константа N определяет количество вершин в восьмиугольнике.
- Константа side определяет размер стороны восьмиугольника и вычисляется как 40 радиан.
- Константа dFi вычисляется как отношение пи к 180 градусам.
- Константа FiLim вычисляется как два пи, деленные на N, что позволяет определить максимально возможное изменение угла FiCur без выхода за пределы графического экрана.
- Константа sideColor задает цвет стороны восьмиугольника и равен 3.
- Константа pause определяет длительность паузы между обновлениями экрана и равна 20.
- Тип top представляет вершину восьмиугольника и содержит поля x и y, которые представляют координаты вершины.
- Переменная tops представляет массив из N вершин и содержит поля x и y для каждой вершины.
- Переменная FiCur содержит текущий угол поворота восьмиугольника.
- Переменная i представляет номер текущей вершины восьмиугольника.
- Переменная lineY и lineX представляют координаты верхней и нижней сторон восьмиугольника соответственно.
- Переменные graph_device и graph_mode представляют устройства и режимы графики соответственно и определяются функцией detect.
- Переменная lineX представляет максимальную горизонтальную координату экрана.
- Переменная lineY представляет максимальную вертикальную координату экрана, умноженную на 3 и деленную на 4.
- Переменная tops[N].x и tops[N].y представляют координаты вершины восьмиугольника, которая находится в правом нижнем углу.
- Переменная bufTop представляет буфер для хранения координат предыдущей вершины.
- Переменная FiCur изменяется от 0 до 2*pi, что позволяет описать полный оборот восьмиугольника.
- Переменная recount пересчитывает координаты всех вершин восьмиугольника.
- Переменная shift перемещает все вершины восьмиугольника на одну позицию вправо.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д