Нарисовать звезду - Pascal

Узнай цену своей работы

Формулировка задачи:

Program Rotation and Reflection;
 
uses Crt, Graph;
var
   gd, gm: Integer;
   par: array[1..8, 1..3] of real;
   ribs: array[1..12, 1..2] of integer;
   i: integer;
   ch: char;
   corner : real;
 
procedure draw;
var
   x1, x2, y1, y2: integer;
   ver1, ver2: integer;
begin
   for i := 1 to 12 do begin
   ver1 := ribs[i,1];
   ver2 := ribs[i,2];
   x1 := round(par[ver1,1])+320;
   y1 := 240-round(par[ver1,2]);
   x2 := round(par[ver2,1])+320;
   y2 := 240-round(par[ver2,2]);
   line(x1,y1,x2,y2);
  end;
end;
 
procedure reflection_XOZ_YOZ;
begin
   for i:=1 to 8 do begin
       par[i,2]:=-par[i,2];
       par[i,1]:=-par[i,1];
   end;
end;
 
procedure reflection_XOZ_XOY;
begin
   for i:=1 to 8 do begin
       par[i,2]:=-par[i,2];
       par[i,3]:=-par[i,3];
   end;
end;
 
procedure reflection_XOY_YOZ;
begin
   for i:=1 to 8 do begin
       par[i,3]:=-par[i,3];
       par[i,1]:=-par[i,1];
   end;
end;
 
procedure turnOX(corner: real);
var
   y,z: real;
begin
   for i:=1 to 8 do Begin
       y:=par[i,2];
       z:=par[i,3];
       par[i,2]:=y*cos(corner)-z*sin(corner);
       par[i,3]:=y*sin(corner)+z*cos(corner);
   end;
end;
 
procedure turnOY(corner: real);
var
   x,z: real;
begin
   for i:=1 to 8 do begin
       x:=par[i,1];
       z:=par[i,3];
       par[i,1]:=x*cos(corner)+z*sin(corner);
       par[i,3]:=-x*sin(corner)+z*cos(corner);
   end;
end;
 
procedure turnOZ(corner: real);
var
   x,y: real;
begin
   for i:=1 to 8 do begin
       x:=par[i,1];
       y:=par[i,2];
       par[i,1]:=x*cos(corner)-y*sin(corner);
       par[i,2]:=x*sin(corner)+y*cos(corner);
   end;
end;
 
begin
   par[1,1]:=0;    par[1,2]:=0;    par[1,3]:=0;
   par[2,1]:=0;    par[2,2]:=110;  par[2,3]:=0;
   par[3,1]:=175;  par[3,2]:=110;  par[3,3]:=0;
   par[4,1]:=175;  par[4,2]:=0;    par[4,3]:=0;
   par[5,1]:=0;    par[5,2]:=0;    par[5,3]:=150;
   par[6,1]:=0;    par[6,2]:=110;  par[6,3]:=150;
   par[7,1]:=175;  par[7,2]:=110;  par[7,3]:=150;
   par[8,1]:=175;  par[8,2]:=0;    par[8,3]:=150;
 
   ribs[1,1]:=1;   ribs[1,2]:=2;
   ribs[2,1]:=2;   ribs[2,2]:=3;
   ribs[3,1]:=3;   ribs[3,2]:=4;
   ribs[4,1]:=4;   ribs[4,2]:=1;
   ribs[5,1]:=5;   ribs[5,2]:=6;
   ribs[6,1]:=6;   ribs[6,2]:=7;
   ribs[7,1]:=7;   ribs[7,2]:=8;
   ribs[8,1]:=8;   ribs[8,2]:=5;
   ribs[9,1]:=1;   ribs[9,2]:=5;
   ribs[10,1]:=2;  ribs[10,2]:=6;
   ribs[11,1]:=3;  ribs[11,2]:=7;
   ribs[12,1]:=4;  ribs[12,2]:=8;

   gd := VGA;
   gm := VGAHi;
   InitGraph(gd, gm, '../bgi');
 
   If GraphResult <> grOk then
      Halt(1);
 
   turnOX(pi/12);
   turnOY(pi/12);
   turnOZ(pi/12);
   While ch<>#27 do begin
      ClearDevice;
      Draw;
      OuttextXY(10,450,'Press <1>-<6> for rotation, <7>-<9> for reflection');
      OuttextXY(10,465,'Press <Esc> to Exit');
      ch:=readkey;
      Case ch Of
         '1': turnOX(pi/15);
         '4': turnOX(-pi/15);
         '2': turnOY(pi/15);
         '5': turnOY(-pi/15);
         '3': turnOZ(pi/15);
         '6': turnOZ(-pi/15);
         '7': reflection_XOZ_YOZ;
         '8': reflection_XOZ_XOY;
         '9': reflection_XOY_YOZ;
      end;
   end;
   closegraph;
end.
Так вот вместо квадрата нужно другую фигуру. Что - то похожее на звезду необязательно такую, похожую, подскажите, а лучше покажите как.

Решение задачи: «Нарисовать звезду»

textual
Листинг программы
uses graph;
procedure Figura(x1,y1,d,m,u,c:integer);
var a,i,d1:integer;
    p:array[1..9] of pointtype;
begin
d1:=d div m;
a:=u;
for i:=1 to 8 do
 begin
  if i mod 2=0 then
   begin
    p[i].x:=x1+round(d*cos(a*pi/180));
    p[i].y:=y1-round(d*sin(a*pi/180));
   end
  else
   begin
    p[i].x:=x1+round(d1*cos(a*pi/180));
    p[i].y:=y1-round(d1*sin(a*pi/180));
   end;
  a:=a+45;
 end;
p[9]:=p[1];
SetColor(c);
Setfillstyle(1,c);
Fillpoly(9,p)
end;
var gd,gm,xc,yc:integer;
begin
gd:=0;
initgraph(gd,gm,'');
xc:=getmaxX div 2;
yc:=getmaxY div 2;
Figura(xc,yc,80,2,0,1);
Figura(xc,yc,100,4,-45,9);
readln
end.

Объяснение кода листинга программы

  1. В начале кода подключается библиотека graph, которая, вероятно, содержит функции для работы с графиками.
  2. Создается процедура Figura, которая принимает 6 аргументов: x1, y1, d, m, u и c. Эти переменные, скорее всего, представляют собой координаты точки, радиус и угол поворота звезды, а также цвет заливки.
  3. Внутри процедуры объявлены 2 переменные: a и i.
  4. Создается массив p типа pointtype, который будет использоваться для хранения координат точек звезды.
  5. Вычисляется значение переменной d1, которая, вероятно, представляет собой радиус звезды, деленный на m.
  6. Значение переменной a устанавливается равным u.
  7. Запускается цикл for, который выполняется 8 раз.
  8. Внутри цикла проверяется, является ли текущий индекс элемента i четным числом. Если это так, то выполняется блок кода внутри if.
  9. Внутри блока if вычисляются координаты точки p[i] с помощью формулы, которая использует d и a.
  10. После вычисления координат точки p[i] устанавливаются значения x и y.
  11. Значение переменной a увеличивается на 45.
  12. После завершения цикла for устанавливается значение p[9] равным p[1], что, вероятно, восстанавливает начальные координаты первой точки звезды.
  13. Вызывается функция SetColor(c), которая, вероятно, устанавливает цвет заливки для графика.
  14. Вызывается функция Setfillstyle(1,c), которая, вероятно, устанавливает стиль заполнения для графика.
  15. Вызывается функция Fillpoly(9,p), которая, вероятно, рисование звезды на графике.
  16. Конец программы.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 4.083 из 5
Похожие ответы