Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
listing_2003_7.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
233.98 Кб
Скачать

3.2. Использование процедур Ellipse, FillEllipse

Задание 3.2.1. Нарисовать конусный волчок из горизонтальных эллипсов, уменьшающихся в размере к вертикальным вершинам волчка. Каждый новый эллипс рисуется с меньшими радиусами по обеим осями с новыми координатами по оси у.

uses

graph, crt;

var

err, gd, gm, i: integer;

begin

gd:=vga;

gm:=vgahi;

initgraph(gd, gm, 'd:\bp\bgi');

err:=graphresult;

if err<>grok then

begin

writeln('Ошибка открытия графики');

halt(1)

end;

line (350, 200, 300, 100); {Рисуется волчок}

line (250, 200, 300, 100);

line (250, 200, 300, 300);

line (350, 200, 300, 300);

for i:=1 to 10 do

begin

ellipse(300, 200-(i-1)*10, 0, 360, 50-(i-1)*5, 20-(i-1)*2);

ellipse(300, 200+(i-1)*10, 0, 360, 50-(i-1)*5, 20-(i-1)*2)

end;

readln;

closegraph;

end.

Задание 3.2.2. Нарисовать луг, на котором расцветает огромное количество цветов. Чем цветы к нам ближе, тем они крупнее, чем дальше, тем мельче. Цветы будут иметь форму эллипсов. (Эту задачу можно рассматривать как часть задачи о создании дороги, уходящей вдаль и вымощенной булыжниками.)

uses

graph, crt;

var

r, rx, y, err, gd, gm: integer;

begin

gd:=vga;

gm:=vgahi;

initgraph(gd, gm, 'd:\bp\bgi');

err:=graphresult;

if err<>grok then

begin

writeln('Ошибка открытия графики');

halt(1)

end;

randomize;

repeat

r:=round(random(60)); {радиус эллипса по оси у}

rx:=round(r*1.5); {радиус эллипса по оси х}

y:=r*8; {чем радиус меньше, тем выше будет эллипс}

setfillstyle(1,round(random(15)+1));

fillellipse(round(random(640)), y, rx, r);

delay(420)

until keypressed; {эллипсы будут появляться до нажатия клавиши}

readln;

closegraph;

end.

Задание 3.2.3. Нарисовать множество звезд разнообразной формы и разного цвета. За основу берется программа рисования правильной пятиконечной звезды с радиусом внешней окружности r1 (в нее вписывается звезда) и радиусом внутренней окружности r2 (к ней сходятся стороны лучей). Звезда рисуется десятью прямыми линиями, которые сначала идут от внешней окружности в сторону внутренней, а потом наоборот. Так как координаты центров звезд и их радиусы задаются с помощью датчика случайных чисел, то необходимо исключить все случаи, когда звезда не будет нарисована полностью на экране, иначе ее нельзя будет залить. В тех случаях, когда радиус внешней окружности будет меньше радиуса внутренней или равен ей, получатся звезды-снежинки, или правильные многогранники.

uses

graph, crt;

var

x, y, err, gd, gm, i, cv, r1, r2: integer;

begin

gd:=vga;

gm:=vgahi;

initgraph(gd, gm, 'd:\bp\bgi');

err:=graphresult;

if err<>grok then

begin

writeln('Ошибка открытия графики');

halt(1)

end;

repeat

randomize;

x:=random(640)+1;

y:=random(480)+1;

r1:=random(100);

r2:=random(70);

if (640-x<=r1) or (640-x<=r2) then x:=500;

if ((x-r1)<=0) or (x-r2<=0) then x:=110;

if (480-y<=r1) or (480-y<=r2) then y:=300;

if (y<=r1) or (y<=r2) then y:=110;

cv:=random(16);

setcolor(cv);

for i:=1 to 10 do

if i mod 2=1 then

line(x+trunc(r1*cos((i)*pi/5)), y+trunc(r1*sin((i)*pi/5)),

x+trunc(r2*cos((i+1)*pi/5)), y+trunc(r2*sin((i+1)*pi/5)))

else

line(x+trunc(r1*cos((i+1)*pi/5)), y+trunc(r1*sin((i+1)*pi/5)),

x+trunc(r2*cos((i)*pi/5)), y+trunc(r2*sin((i)*pi/5)));

setfillstyle(1, cv);

floodfill(x, y, cv);

until keypressed;

readln;

closegraph;

end.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]