Анимация: несколько концентрических "звезд", вращающихся относительно их центра построения - Pascal ABC

Узнай цену своей работы

Формулировка задачи:

Создайте пожалуйста программу.(желательно сделать программу как можна проще) Программа должна выводить несколько концентрических "звезд", вращающиеся относительно их центра построения. Каждая звезда вписывается в круг радиусом R и центром (х0, y0) и повернута относительно предыдущей звезды на угол . В то же время на экране должно находится N звезд, все предыдущие звезды должны удаляться. Вывод звезд прекращать при нажатии любой клавиши.

Решение задачи: «Анимация: несколько концентрических "звезд", вращающихся относительно их центра построения»

textual
Листинг программы
uses graphABC;
type Tzvezda=record
             x,y:integer;
             u:real;
            end;
procedure Zvezda(x,y:integer;u:real);
var  i,k,r1,r2:integer;
     p:array of Point;
     a:real;
begin
setlength(p,11);
r1:=40;
for k:=1 to 3 do
 begin
  a:=u;
  r2:=round(r1*0.382);
  for i:=0 to 9 do
   begin
    if i mod 2=1 then
     begin
      p[i].x:=x+round(r2*cos(a));
      p[i].y:=y-round(r2*sin(a));
     end
    else
     begin
      p[i].x:=x+round(r1*cos(a));
      p[i].y:=y-round(r1*sin(a));
     end;
    a:=a+pi/5;
   end;
  p[10]:=p[0];
  setpencolor(clRed);
  polyline(p);
  r1:=r1-10;
  end;
end;
var f:boolean;
procedure KeyPress(key:char);
begin
if key<>#0 then f:=false;
end;
const n=15;
var x,y,dx,dy,i:integer;
    a:array[1..n]  of Tzvezda;
    u:real;
begin
f:=true;
onkeypress:=KeyPress;
u:=pi/2;
dx:=windowwidth div 6;
dy:=windowheight div 4;
x:=dx;
y:=dy;
for i:=1 to n do
 begin
  a[i].x:=x;
  a[i].y:=y;
  a[i].u:=u;
  x:=x+dx;
  if i mod 5=0 then
   begin
    x:=dx;
    y:=y+dy;
   end;
  u:=u+pi/8;
 end;
lockdrawing;
repeat
clearwindow;
for i:=1 to n do
Zvezda(a[i].x,a[i].y,a[i].u);
sleep(50);
for i:=1 to n do
A[I].U:=A[I].U+0.1;
redraw;
until not(f);
end.

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

  1. Используется библиотека graphABC.
  2. Создается тип Tzvezda, который содержит поля x, y и u типа real.
  3. Создается процедура Zvezda, которая принимает аргументы x, y и u типа real.
  4. Внутри процедуры создаются переменные i, k, r1, r2 типа integer.
  5. Создается массив p типа array[1..11] of Point.
  6. В цикле for k:=1 до 3 do.
  7. Для каждого i от 0 до 9.
  8. Если i mod 2=1, то.
  9. Вычисляется значение r2.
  10. Для каждого i от 0 до 9.
  11. Если i mod 2=1, то.
  12. Вычисляется значение a.
  13. Вычисляется значение r1.
  14. Вычисляется значение p[i].x и p[i].y.
  15. Если i mod 5=0, то.
  16. Вычисляется значение x и y.
  17. Устанавливается цвет пера на красный (clRed).
  18. Вызывается функция polyline(p).
  19. Устанавливается значение r1 на r1-10.
  20. Конец цикла for k.
  21. Задается значение f равным true.
  22. Создается процедура KeyPress, которая принимает аргумент key типа char.
  23. Внутри процедуры KeyPress проверяется значение key.
  24. Если key не равно #0, то устанавливается значение f в false.
  25. Константа n равна 15.
  26. Создается переменная a типа array[1..n] of Tzvezda.
  27. Создается переменная u типа real.
  28. Внутри переменной x и y присваиваются значения dx и dy, определенные ранее.
  29. Цикл повторяется до тех пор, пока не будет достигнуто условие not(f).
  30. Внутри цикла повторяется последовательность действий:
    • Очистка окна (clearwindow).
    • Вызов процедуры Zvezda для каждого элемента a[i].
    • Установка значения A[i].U на A[i].U+0.1.
    • Перерисовка (redraw).
    • Сон (sleep(50)).
  31. Конец цикла while not(f).
  32. Конец программы.

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


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

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

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