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