- •Листинги программ к статье и. М. Павловой "графика на паскале"
- •1. Создание рисунков с использованием прямой линии
- •1.1. Использование процедур MoveTo, LineTo
- •1.2. Использование процедуры Line
- •2. Создание рисунков с использованием прямоугольников
- •2.1. Использование процедур Rectangle, Bar
- •2.2. Создание рисунков с использованием процедур для работы с прямоугольниками и процедур для работы с текстом
- •3. Создание рисунков с использованием окружностей, эллипсов, дуг, секторов
- •3.1. Использование процедуры Circle
- •3.2. Использование процедур Ellipse, FillEllipse
- •3.3. Использование процедур PieSlice, FloodFill
- •3.4. Использование подпрограмм и процедур рисования окружностей, эллипсов, дуг, линий, закраски замкнутой фигуры
- •4. Организация движения
- •4.1. Стирание изображения и восстановление его в новом месте
- •4.2. Организация движения с использованием динамической памяти
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.
