Движение точки по окружности. - Free Pascal
Формулировка задачи:
Изобразить на экране точку, движущуюся по окружности с постоянной угловой скоростью. Составить программу для управления скорости движения точки по окружности. Управление производится клавишами "<" (скорость несколько увеличивается) ">" (скорость несколько уменьшается) Вместо точки можно использовать небольшой круг, прямоугольник или изображение стрелы
Решение задачи: «Движение точки по окружности.»
textual
Листинг программы
- uses wincrt,graph;
- var x0,y0,x,y,r,z:integer;
- u:real;
- c:char;
- begin
- x:=detect;
- initgraph(x,y,'');
- x0:=getmaxX div 2;
- y0:=getmaxY div 2;
- r:=y0 div 2;
- u:=pi/2;
- z:=100;
- repeat
- setcolor(9);
- circle(x0,y0,r);
- x:=x0+round(r*cos(u));
- y:=y0-round(r*sin(u));
- setcolor(12);
- setfillstyle(1,12);
- fillellipse(x,y,2,2);
- outtextXY(x0-50,10,'Esc - exit');
- delay(z);
- setcolor(0);
- circle(x0,y0,r);
- setfillstyle(1,0);
- fillellipse(x,y,2,2);
- u:=u+0.1;
- if keypressed then
- begin
- c:=readkey;
- if c=#0 then c:=readkey;
- case c of
- '<':if z<200 then z:=z+10;
- '>':if z>20 then z:=z-10;
- #27:exit;
- end;
- end
- until c=#27;
- readln;
- end.
Объяснение кода листинга программы
- uses wincrt,graph; - подключаем модули для работы с графикой и консолью Windows
- var x0,y0,x,y,r,z:integer; - объявляем целочисленные переменные для координат и радиуса окружности
- u:real; - объявляем переменную с плавающей точкой для угла
- c:char; - объявляем переменную для хранения символа, в данном случае для обработки нажатий клавиш
- begin - начало блока кода
- x:=detect; - получаем ширину экрана
- initgraph(x,y,''); - инициализируем графический режим
- x0:=getmaxX div 2; - получаем координату X центра окружности
- y0:=getmaxY div 2; - получаем координату Y центра окружности
- r:=y0 div 2; - задаем радиус окружности
- u:=pi/2; - задаем начальный угол
- z:=100; - задаем скорость движения точки по окружности
- repeat - начало цикла
- setcolor(9); - задаем цвет линии
- circle(x0,y0,r); - рисуем окружность с заданным центром и радиусом
- *x:=x0+round(rcos(u));** - вычисляем новую координату X
- *y:=y0-round(rsin(u));** - вычисляем новую координату Y
- setcolor(12); - меняем цвет заливки на светло-зеленый
- setfillstyle(1,12); - устанавливаем стиль заливки в виде эллипса
- fillellipse(x,y,2,2); - рисуем эллипс с заданными координатами и размерами
- outtextXY(x0-50,10,'Esc - exit'); - выводим текст подсказки в указанные координаты
- delay(z); - задержка в 100 миллисекунд
- setcolor(0); - сброс цвета заливки
- circle(x0,y0,r); - перерисовываем окружность с текущими координатами
- setfillstyle(1,0); - сброс стиля заливки
- fillellipse(x,y,2,2); - перерисовываем эллипс с текущими координатами и размерами
- u:=u+0.1; - увеличиваем угол на 0.1 радиана
- if keypressed then - если нажата клавиша
- begin - начало блока обработки нажатий клавиш
- c:=readkey; - получаем символ нажатой клавиши
- if c=#0 then c:=readkey; - считывание нажатия клавиши дважды, чтобы корректно обработать нажатие клавиши Esc
- case c of - блок обработки различных нажатых клавиш
- '<':if z<200 then z:=z+10; - если нажата клавиша
<
, то увеличиваем скорость движения - '>':if z>20 then z:=z-10; - если нажата клавиша
>
, то уменьшаем скорость движения - #27:exit; - если нажата клавиша Esc, то выходим из программы
- end; - конец блока обработки нажатий клавиш
- end; - конец цикла
- readln; - считывание символа новой строки, чтобы программа дождалась ввода пользователя перед завершением
- end. - конец программы
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д