Написать программу, которая рисует восьмиугольник, движущийся по экрану - 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 перемещает все вершины восьмиугольника на одну позицию вправо.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д