Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Рисую флаг Китая, проблема с процедурой

Автор: Mambakremen 21.05.2011 18:52

Флаг Китая
Изображение

Вот написал программу, появляется звезда на красном фоне чуть кривовато что-то с углом надо порешать, а маленькие звездочки вокруг большой звезды нужно строить процедурой, только никак не могу понять как сделать такую процедуру... Я нуб в этом деле, прошу помощи

Program China;
uses crt,graph;
const
n=10;
r1=40;
r2=15;
alfa=2*pi/n;
type
point=record
x,y:integer;
end;
var p:array[1..n] of point;
i:byte;
x0,y0,r:integer;
dr,md:integer;
begin
dr:=detect;
initgraph(dr,md,'c:\tp\bgi');
setbkcolor(white);
setviewport(100,100,100,100,clipoff);
setfillstyle(1,red);
bar(0,0,450,250);
x0:=80;
y0:=80;
for i:=1 to n do begin
if i mod 2 = 0 then r:=r2 else r:=r1;
p[i].x:=x0+round(r*cos((i-1)*alfa));
p[i].y:=y0+round(r*sin((i-1)*alfa));
end;
moveto(p[n].x,p[n].y);
for i:=1 to n do lineto(p[i].x,p[i].y);
setfillstyle(1,white);
floodfill(x0,y0,white);
readkey;
closegraph;
end.

Автор: IUnknown 21.05.2011 20:22

Как-то вот так:

procedure draw_star (px, py : integer;
angle, radius : integer);
const
size = 10;
var
pts : array[1 .. size] of PointType;
i : integer;
R : double;
begin
for i := 1 to 10 do
begin
if odd (i) then
R := Radius
else
R := Radius / 2.5;

// оптимизировать ничего не стал, чтоб было понятно, откуда что берется...
pts[i].X := px + trunc(R * cos((2*pi/10)*pred(i)+(angle*pi/180)));
pts[i].Y := py - trunc(R * sin((2*pi/10)*pred(i)+(angle*pi/180)));
end;
setfillstyle(solidfill, yellow);
fillpoly(size, pts);
end;


// Основная программа выглядит:
setfillstyle (solidfill, red);
bar (0, 0, 450, 250);
draw_star (80, 80, 18, R1);

draw_star (140, 45, -5, R2);
draw_star (160, 75, -2, R2);
draw_star (160, 105, +2, R2);
draw_star (140, 135, +5, R2);
Обязательно разберись с алгоритмом рисования звезды...