Помощь - Поиск - Пользователи - Календарь
Полная версия: Рисую флаг Китая, проблема с процедурой
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Mambakremen
Флаг Китая
Изображение

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

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
Как-то вот так:
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);
Обязательно разберись с алгоритмом рисования звезды...
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.