Нарисовать простой вентилятор - 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.
- В конце программы закрывается графический интерфейс.