Движение точки по окружности. - 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.

Объяснение кода листинга программы

  1. uses wincrt,graph; - подключаем модули для работы с графикой и консолью Windows
  2. var x0,y0,x,y,r,z:integer; - объявляем целочисленные переменные для координат и радиуса окружности
  3. u:real; - объявляем переменную с плавающей точкой для угла
  4. c:char; - объявляем переменную для хранения символа, в данном случае для обработки нажатий клавиш
  5. begin - начало блока кода
  6. x:=detect; - получаем ширину экрана
  7. initgraph(x,y,''); - инициализируем графический режим
  8. x0:=getmaxX div 2; - получаем координату X центра окружности
  9. y0:=getmaxY div 2; - получаем координату Y центра окружности
  10. r:=y0 div 2; - задаем радиус окружности
  11. u:=pi/2; - задаем начальный угол
  12. z:=100; - задаем скорость движения точки по окружности
  13. repeat - начало цикла
  14. setcolor(9); - задаем цвет линии
  15. circle(x0,y0,r); - рисуем окружность с заданным центром и радиусом
  16. *x:=x0+round(rcos(u));** - вычисляем новую координату X
  17. *y:=y0-round(rsin(u));** - вычисляем новую координату Y
  18. setcolor(12); - меняем цвет заливки на светло-зеленый
  19. setfillstyle(1,12); - устанавливаем стиль заливки в виде эллипса
  20. fillellipse(x,y,2,2); - рисуем эллипс с заданными координатами и размерами
  21. outtextXY(x0-50,10,'Esc - exit'); - выводим текст подсказки в указанные координаты
  22. delay(z); - задержка в 100 миллисекунд
  23. setcolor(0); - сброс цвета заливки
  24. circle(x0,y0,r); - перерисовываем окружность с текущими координатами
  25. setfillstyle(1,0); - сброс стиля заливки
  26. fillellipse(x,y,2,2); - перерисовываем эллипс с текущими координатами и размерами
  27. u:=u+0.1; - увеличиваем угол на 0.1 радиана
  28. if keypressed then - если нажата клавиша
  29. begin - начало блока обработки нажатий клавиш
  30. c:=readkey; - получаем символ нажатой клавиши
  31. if c=#0 then c:=readkey; - считывание нажатия клавиши дважды, чтобы корректно обработать нажатие клавиши Esc
  32. case c of - блок обработки различных нажатых клавиш
  33. '<':if z<200 then z:=z+10; - если нажата клавиша <, то увеличиваем скорость движения
  34. '>':if z>20 then z:=z-10; - если нажата клавиша >, то уменьшаем скорость движения
  35. #27:exit; - если нажата клавиша Esc, то выходим из программы
  36. end; - конец блока обработки нажатий клавиш
  37. end; - конец цикла
  38. readln; - считывание символа новой строки, чтобы программа дождалась ввода пользователя перед завершением
  39. end. - конец программы

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 4.071 из 5
Похожие ответы