Анимация: несколько концентрических "звезд", вращающихся относительно их центра построения - 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.
Объяснение кода листинга программы
- Используется библиотека graphABC.
- Создается тип Tzvezda, который содержит поля x, y и u типа real.
- Создается процедура Zvezda, которая принимает аргументы x, y и u типа real.
- Внутри процедуры создаются переменные i, k, r1, r2 типа integer.
- Создается массив p типа array[1..11] of Point.
- В цикле for k:=1 до 3 do.
- Для каждого i от 0 до 9.
- Если i mod 2=1, то.
- Вычисляется значение r2.
- Для каждого i от 0 до 9.
- Если i mod 2=1, то.
- Вычисляется значение a.
- Вычисляется значение r1.
- Вычисляется значение p[i].x и p[i].y.
- Если i mod 5=0, то.
- Вычисляется значение x и y.
- Устанавливается цвет пера на красный (clRed).
- Вызывается функция polyline(p).
- Устанавливается значение r1 на r1-10.
- Конец цикла for k.
- Задается значение f равным true.
- Создается процедура KeyPress, которая принимает аргумент key типа char.
- Внутри процедуры KeyPress проверяется значение key.
- Если key не равно #0, то устанавливается значение f в false.
- Константа n равна 15.
- Создается переменная a типа array[1..n] of Tzvezda.
- Создается переменная u типа real.
- Внутри переменной x и y присваиваются значения dx и dy, определенные ранее.
- Цикл повторяется до тех пор, пока не будет достигнуто условие not(f).
- Внутри цикла повторяется последовательность действий:
- Очистка окна (clearwindow).
- Вызов процедуры Zvezda для каждого элемента a[i].
- Установка значения A[i].U на A[i].U+0.1.
- Перерисовка (redraw).
- Сон (sleep(50)).
- Конец цикла while not(f).
- Конец программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д