Нарисовать простой вентилятор - Turbo Pascal
Формулировка задачи:
Нужна помощь с графикой. Нужно нарисовать простой вентилятор (круг с 2-3 треугольниками внутри) у которого вращение лопастей включается/выключается нажатием клавиши на клавиатуре.
Решение задачи: «Нарисовать простой вентилятор»
textual
Листинг программы
uses graph,crt; type Vent=object x,y,r1,r2,cl:integer;{поля: координаты центра вентилятора, радиусы, цвет лопастей} u:real; {угол поворота лопастей} procedure init(ax,ay,ar1,ar2:integer);{создание объекта, рисование корпуса} procedure lop;{рисование лопастей} procedure new_color(acl:integer);{смена цвета лопастей} procedure new_angle;{смена угла поворота лопастей} end; procedure Vent.init(ax,ay,ar1,ar2:integer); begin x:=ax; y:=ay; r1:=ar1; r2:=ar2; cl:=8; u:=pi/2; setcolor(7); setfillstyle(1,7); fillellipse(x,y,r1,r1); setcolor(14); setfillstyle(1,14); fillellipse(x,y,r2,r2); setcolor(15); outtextXY(x-90,10,'1-pusk 2-stop esc-vyhod'); end; procedure Vent.new_color(acl:integer); begin cl:=acl; end; procedure Vent.new_angle; begin u:=u-0.5; end; procedure Vent.lop; var a:real; i:byte; x1,y1,x2,y2,x3,y3:integer; begin setcolor(cl); setfillstyle(1,cl); a:=0; for i:=1 to 3 do begin x1:=x+round((r2+2)*cos(u+a-pi/4)); y1:=y-round((r2+2)*sin(u+a-pi/4)); x2:=x+round((r2+2)*cos(u+a+pi/4)); y2:=y-round((r2+2)*sin(u+a+pi/4)); x3:=x+round((r1-5)*cos(u+a)); y3:=y-round((r1-5)*sin(u+a)); line(x1,y1,x3,y3); line(x2,y2,x3,y3); circle(x,y,r2+2); floodfill(x+round((r2+10)*cos(u+a)),y-round((r2+10)*sin(u+a)),cl); a:=a+2*pi/3; end; end; {основная программа} var xc,yc:integer; v:Vent; c:char; begin initgraph(xc,yc,''); xc:=getmaxX div 2; yc:=getmaxY div 2; v.init(xc,yc,100,30); v.lop; repeat if keypressed then begin c:=readkey; case c of '1': repeat delay(50); v.new_color(7); v.lop; v.new_angle; v.new_color(8); v.lop; if keypressed then c:=readkey; until c in ['2',#27]; '2':v.lop; #27:exit; end; end; until c=#27; end.
Объяснение кода листинга программы
- В начале кода подключаются необходимые библиотеки graph и crt.
- Затем определяется тип Vent с полями x, y, r1, r2, cl: integer; u: real;
- Определены четыре процедуры: init, lop, new_color, new_angle.
- В процедуре init рисуется корпус вентилятора с помощью функции fillellipse и устанавливается угол поворота лопастей u = π/2.
- В процедуре lop рисуются лопасти вентилятора с помощью функции setfillstyle, функции fillellipse и функции outtextXY.
- В процедурах new_color и new_angle меняется цвет или угол поворота лопастей соответственно.
- В основной программе создается объект v типа Vent, рисуется его корпус, затем выполняется цикл, в котором при нажатии клавиши 1 меняется цвет лопастей, рисуются лопасти, меняется угол поворота, снова рисуются лопасти, пока не будет нажата клавиша 2.
- В конце программы закрывается графический интерфейс.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д