GromikMir

Привет всем!

Присоединяйтесь к моему клубу (Корабль Космические шахматы) (пожалуйста)!

Я имею 2 бронзовые, 1 серебряную и 1 золотую медали по шахматам.

Я прикрепил лучшую свою программу. Она написана на Pascal ABC.net. Вводите что угодно и получаете красивую картинку. После неё я прикрепил несколько картинок, которые выдала эта программа. 

Вот она: (1100 строк)

uses WPFObjects, graphwpf;// подключаем графическую библиотеку
var
  pt: array of point;
  ii, q, w: integer;
var
  tr, ob1, ob2, ob3, ob4, ob5, ob6, ob7, ob8, ob9, ob10, ob11, ob12, ob13, ob14, ob15, ob16, ob17, ob18, ob19, ob20, ob21, ob22, ob23, ob24, He: array [1..1500] of ObjectWPF;
const
  maxsize = 999999;
begin
  var n, k, l, su: int64;
 
  var st: string;
 
  var y, r, g, b, s, t, z, x, a, o, c, ag: array [1..maxsize] of int64;
 
  n := 1;
  L := Length(st);
  read(st);
  L := Length(st);
  for var i := 1 to Length(st) do
  begin
   
    y[i] := Ord(st[i]);
   
   
  end;
  if (Length(st) = 1) then
  begin
    y[1] := Ord(st[1]);
    y[2] := Ord(st[1]) + 1;
    y[3] := Ord(st[1]);
    y[4] := Ord(st[1]);
    L := 4
  end;
  if (Length(st) = 2) then
  begin
   
    y[3] := Ord(st[2]);
    y[4] := Ord(st[1]);
    l := 4
  end;
    if (Length(st) = 0) then
  begin
   
    y[1] := Ord('`');
    y[2] := Ord('`') + 1;
    y[3] := Ord('`') + 2;
    y[4] := Ord('`')+3;
   
    l := 4
  end;
  if (Length(st) = 3) then
  begin
   
    y[4] := Ord(st[2]);
    l := 4;
  end;
  //Print(y);
  k := l;
  for var j := 1 to 10 do
  begin
    for var i := n to k do
    begin
      ag[j] :=  ag[j] + y[j] div 3;
      t[j] := y[i] + t[j] * 3;
      r[j] := y[i] + r[j];
      g[j] := y[i] * y[i + 1] + g[j];
      b[j] := y[i] + b[j] * 2;
      s[j] := (s[j] + y[i]) * y[i];
     
      o[j] := y[i] + o[j];
      c[j] := y[i] mod 2;
     
    end;
    z[j] := o[j] mod 123;
    t[j] := t[j] mod 19;
    r[j] := r[j] mod 255;
    g[j] := g[j] mod 255;
    b[j] := b[j] mod 255;
    s[j] := s[j] mod 50;
    a[j] := y[j] mod 3;
   
    if ((r[j] < 100) and (g[j] < 100) and (b[j] < 100)) then
    begin
      case a[j] of
        1: r[j] := r[j] + 100;
        2: g[j] := g[j] + 100;
        0: b[j] := b[j] + 100;
      end;
    end;
    while (Abs(r[j] - g[j]) < 75) and (Abs(r[j] - b[j]) < 75) and (Abs(g[j] - b[j]) < 75) do
    begin
      R[j] := r[j] + 1;
      B[j] := b[j] + 2;
    end;
    if (s[j] < 10) then
    begin
      while s[j] < 10 do
      begin
        s[j] := s[j] + 20;
      end;
    end;
    if (z[j] + s[j] > 123) then
    begin
      z[j] := 123 - s[j];
     
    end;
    if (z[j]  < s[j]) then
    begin
      while z[j] * 1.15 <= s[j] do
      begin
       
        z[j] := z[j] + 1;
      end;
     
    end;
   
    x[j] := (o[j] mod (z[j]  div 2 + 1)); //
    if (c[j] = 1) then
    begin
      x[j] := 0 - x[j];
    end;
    //Print (x[j]);
    if (x[j] + s[j] > (z[j] div 2)) then //
    begin
      x[j] := (z[j]) div 2 - s[j]; //
     
    end;
   
   
   
    x[j] := x[j] + 71;
    case j of
      2: n := k;
      3: n := 1;
      4: n := k;
      5: n := k;
      6: n := 1;
      7: n := k;
      8: n := k;
      9: n := k;
    end;
    case j of
      1: k := L div 2;
      2: k := L;
      3: k := L div 3;
      4: k := L div 3 * 2;
      5: k := L;
      6: k := L div 4;
      7: k := L div 4 * 2;
      8: k := L div 4 * 3;
      9: k := L ;
   
    end;
  end;
  // for q:= 1 to 3 do
    //begin
  for ii := 1 to 180 do
  begin
    SetLength(pt, 3);
    pt[0] := (0, 0);
    pt[1] := (-71, 122.9760733739);
    pt[2] := (71, 122.97560733739);
    tr[ii] := PolygonWPF.Create(pt, RGB(255, 255, 255));
   
   
  end;
  for var j := 1 to 10 do
    //print(r[j], g[j], b[j], t[j], s[j], x[j], z[j], ag[j], '*');
  begin
    case t[j] of
      18:
        begin
          for var i := 1 to 180 do
          begin
            //Print(18);
           
           
            SetLength(pt, 10);
            pt[0] := (5, 0);
            pt[1] := (2, 4);
            pt[2] := (4, 3);
            pt[3] := (4, 7);
            pt[4] := (2, 10);
            pt[5] := (5, 8);
            pt[6] := (8, 10);
            pt[7] := (6, 7);
            pt[8] := (6, 3);
            pt[9] := (8, 4);
           
           
            ob19[i] := PolygonWPF.Create(pt, RGB(R[j], g[j], b[j]));
           
           
            ob19[i].Scale(s[j] / 10);
            ob19[i].rotate(ag[j]);
          end;
          for var i := 1 to 90 do
          begin
           
            tr[i].AddChild(ob19[i], Alignment.Center);
            ob19[i].MoveTo(x[j], z[j]);
           
          end;
         
          for var i := 91 to 180 do
          begin
            ob19[i].rotate((360 - ag[j]) * 2);
            tr[i].AddChild(ob19[i], Alignment.Center);
            if ((x[j] - 71) > 0) then
            begin
              ob19[i].MoveTo(x[j] - (x[j] - 71) * 2 - ob19[i].ScaledWidth, z[j]);
            end
                       else
            begin
              ob19[i].MoveTo(x[j] + (71 - x[j]) * 2 - ob19[i].ScaledWidth, z[j]);
            end;
           
          end;
         
        end;
      17:
        begin
          for var i := 1 to 180 do
          begin
            //Print(17);
           
           
            ob18[i] := StarWPF.Create(400, 200, 5, 3, 8, RGB(R[j], g[j], b[j]));
           
           
            ob18[i].Scale(s[j] / 10);
            ob18[i].rotate(ag[j]);
          end;
          for var i := 1 to 90 do
          begin
           
            tr[i].AddChild(ob18[i], Alignment.Center);
            ob18[i].MoveTo(x[j], z[j]);
           
          end;
         
          for var i := 91 to 180 do
          begin
            ob18[i].rotate((360 - ag[j]) * 2);
            tr[i].AddChild(ob18[i], Alignment.Center);
            if ((x[j] - 71) > 0) then
            begin
              ob18[i].MoveTo(x[j] - (x[j] - 71) * 2 - ob18[i].ScaledWidth, z[j]);
            end
                       else
            begin
              ob18[i].MoveTo(x[j] + (71 - x[j]) * 2 - ob18[i].ScaledWidth, z[j]);
            end;
           
          end;
        end;
      16:
        begin
          for var i := 1 to 180 do
          begin
            //Print(16);
           
           
            ob17[i] := StarWPF.Create(400, 150, 5, 1, 7, RGB(R[j], g[j], b[j]));
           
           
            ob17[i].Scale(s[j] / 10);
            ob17[i].rotate(ag[j]);
          end;
          for var i := 1 to 90 do
          begin
           
            tr[i].AddChild(ob17[i], Alignment.Center);
            ob17[i].MoveTo(x[j], z[j]);
           
          end;
         
          for var i := 91 to 180 do
          begin
            ob17[i].rotate((360 - ag[j]) * 2);
            tr[i].AddChild(ob17[i], Alignment.Center);
            if ((x[j] - 71) > 0) then
            begin
              ob17[i].MoveTo(x[j] - (x[j] - 71) * 2 - ob17[i].ScaledWidth, z[j]);
            end
                       else
            begin
              ob17[i].MoveTo(x[j] + (71 - x[j]) * 2 - ob17[i].ScaledWidth, z[j]);
            end;
           
          end;
        end;
      15:
        begin
          for var i := 1 to 180 do
          begin
            //Print(15);
           
           
            ob16[i] := StarWPF.Create(50, 50, 5, 3, 5, RGB(R[j], g[j], b[j]));
           
           
            ob16[i].Scale(s[j] / 10);
            ob16[i].rotate(ag[j]);
          end;
          for var i := 1 to 90 do
          begin
           
            tr[i].AddChild(ob16[i], Alignment.Center);
            ob16[i].MoveTo(x[j], z[j]);
           
          end;
         
          for var i := 91 to 180 do
          begin
            ob16[i].rotate((360 - ag[j]) * 2);
            tr[i].AddChild(ob16[i], Alignment.Center);
            if ((x[j] - 71) > 0) then
            begin
              ob16[i].MoveTo(x[j] - (x[j] - 71) * 2 - ob16[i].ScaledWidth, z[j]);
            end
                       else
            begin
              ob16[i].MoveTo(x[j] + (71 - x[j]) * 2 - ob16[i].ScaledWidth, z[j]);
            end;
           
          end;
        end;
      14:
        begin
          for var i := 1 to 180 do
          begin
            //Print(14);
           
           
            ob15[i] := StarWPF.Create(150, 150, 5, 1, 3, RGB(R[j], g[j], b[j]));
           
           
            ob15[i].Scale(s[j] / 10);
            ob15[i].rotate(ag[j]);
          end;
          for var i := 1 to 90 do
          begin
           
            tr[i].AddChild(ob15[i], Alignment.Center);
            ob15[i].MoveTo(x[j], z[j]);
           
          end;
         
          for var i := 91 to 180 do
          begin
            ob15[i].rotate((360 - ag[j]) * 2);
            tr[i].AddChild(ob15[i], Alignment.Center);
            if ((x[j] - 71) > 0) then
            begin
              ob15[i].MoveTo(x[j] - (x[j] - 71) * 2 - ob15[i].ScaledWidth, z[j]);
            end
                       else
            begin
              ob15[i].MoveTo(x[j] + (71 - x[j]) * 2 - ob15[i].ScaledWidth, z[j]);
            end;
           
          end;
        end;
      13:
        begin
          for var i := 1 to 180 do
          begin
            //Print(13);
           
           
            ob14[i] := StarWPF.Create(500, 350, 5, 4, 3, RGB(R[j], g[j], b[j]));
           
           
            ob14[i].Scale(s[j] / 10);
            ob14[i].rotate(ag[j]);
          end;
          for var i := 1 to 90 do
          begin
           
            tr[i].AddChild(ob14[i], Alignment.Center);
            ob14[i].MoveTo(x[j], z[j]);
           
          end;
         
          for var i := 91 to 180 do
          begin
            ob14[i].rotate((360 - ag[j]) * 2);
            tr[i].AddChild(ob14[i], Alignment.Center);
            if ((x[j] - 71) > 0) then
            begin
              ob14[i].MoveTo(x[j] - (x[j] - 71) * 2 - ob14[i].ScaledWidth, z[j]);
            end
                       else
            begin
              ob14[i].MoveTo(x[j] + (71 - x[j]) * 2 - ob14[i].ScaledWidth, z[j]);
            end;
           
          end;
        end;
      12:
        begin
          for var i := 1 to 180 do
          begin
            //Print(12);
           
           
            ob13[i] := StarWPF.Create(300, 300, 5, 1, 19, RGB(R[j], g[j], b[j]));
           
           
            ob13[i].Scale(s[j] / 10);
            ob13[i].rotate(ag[j]);
          end;
          for var i := 1 to 90 do
          begin
           
            tr[i].AddChild(ob13[i], Alignment.Center);
            ob13[i].MoveTo(x[j], z[j]);
           
          end;
         
          for var i := 91 to 180 do
          begin
            ob13[i].rotate((360 - ag[j]) * 2);
            tr[i].AddChild(ob13[i], Alignment.Center);
            if ((x[j] - 71) > 0) then
            begin
              ob13[i].MoveTo(x[j] - (x[j] - 71) * 2 - ob13[i].ScaledWidth, z[j]);
            end
                       else
            begin
              ob13[i].MoveTo(x[j] + (71 - x[j]) * 2 - ob13[i].ScaledWidth, z[j]);
            end;
           
          end;
        end;
      11:
        begin
          for var i := 1 to 180 do
          begin
            //Print(11);
           
           
            ob12[i] := StarWPF.Create(400, 250, 5, 1, 4, RGB(R[j], g[j], b[j]));
           
           
            ob12[i].Scale(s[j] / 10);
            ob12[i].rotate(ag[j]);
          end;
          for var i := 1 to 90 do
          begin
           
            tr[i].AddChild(ob12[i], Alignment.Center);
            ob12[i].MoveTo(x[j], z[j]);
           
          end;
         
          for var i := 91 to 180 do
          begin
            ob12[i].rotate((360 - ag[j]) * 2);
            tr[i].AddChild(ob12[i], Alignment.Center);
            if ((x[j] - 71) > 0) then
            begin
              ob12[i].MoveTo(x[j] - (x[j] - 71) * 2 - ob12[i].ScaledWidth, z[j]);
            end
                       else
            begin
              ob12[i].MoveTo(x[j] + (71 - x[j]) * 2 - ob12[i].ScaledWidth, z[j]);
            end;
           
          end;
        end;
      10:
        begin
          for var i := 1 to 180 do
          begin
            //Print(10);
            SetLength(pt, 4);
            pt[0] := (5, 0);
            pt[1] := (2, 10);
            pt[2] := (5, 6);
            pt[3] := (8, 10);
           
            ob11[i] := PolygonWPF.Create(pt, RGB(R[j], g[j], b[j]));
           
           
            ob11[i].Scale(s[j] / 10);
            ob11[i].rotate(ag[j]);
          end;
          for var i := 1 to 90 do
          begin
           
            tr[i].AddChild(ob11[i], Alignment.Center);
            ob11[i].MoveTo(x[j], z[j]);
           
          end;
         
          for var i := 91 to 180 do
          begin
            ob11[i].rotate((360 - ag[j]) * 2);
            tr[i].AddChild(ob11[i], Alignment.Center);
            if ((x[j] - 71) > 0) then
            begin
              ob11[i].MoveTo(x[j] - (x[j] - 71) * 2 - ob11[i].ScaledWidth, z[j]);
            end
                       else
            begin
              ob11[i].MoveTo(x[j] + (71 - x[j]) * 2 - ob11[i].ScaledWidth, z[j]);
            end;
           
          end;
        end;
      9:
        begin
          for var i := 1 to 180 do
          begin
            //Print(9);
            ob10[i] := StarWPF.Create(50, 150, 5, 2, 3, RGB(R[j], g[j], b[j]));
           
            ob10[i].Scale(s[j] / 10);
            ob10[i].rotate(ag[j]);
          end;
          for var i := 1 to 90 do
          begin
           
            tr[i].AddChild(ob10[i], Alignment.Center);
            ob10[i].MoveTo(x[j], z[j]);
           
          end;
         
          for var i := 91 to 180 do
          begin
            ob10[i].rotate((360 - ag[j]) * 2);
            tr[i].AddChild(ob10[i], Alignment.Center);
            if ((x[j] - 71) > 0) then
            begin
              ob10[i].MoveTo(x[j] - (x[j] - 71) * 2 - ob10[i].ScaledWidth, z[j]);
            end
                       else
            begin
              ob10[i].MoveTo(x[j] + (71 - x[j]) * 2 - ob10[i].ScaledWidth, z[j]);
            end;
           
          end;
        end;
      8:
        begin
          for var i := 1 to 180 do
          begin
            //Print(8);
            ob9[i] := StarWPF.Create(450, 250, 5, 4, 4, RGB(R[j], g[j], b[j]));
           
            ob9[i].Scale(s[j] / 10);
            ob9[i].rotate(ag[j]);
          end;
          for var i := 1 to 90 do
          begin
           
            tr[i].AddChild(ob9[i], Alignment.Center);
            ob9[i].MoveTo(x[j], z[j]);
           
          end;
         
          for var i := 91 to 180 do
          begin
            ob9[i].rotate((360 - ag[j]) * 2);
            tr[i].AddChild(ob9[i], Alignment.Center);
            if ((x[j] - 71) > 0) then
            begin
              ob9[i].MoveTo(x[j] - (x[j] - 71) * 2 - ob9[i].ScaledWidth, z[j]);
            end
                       else
            begin
              ob9[i].MoveTo(x[j] + (71 - x[j]) * 2 - ob9[i].ScaledWidth, z[j]);
            end;
           
          end;
        end;
      7:
        begin
          for var i := 1 to 180 do
          begin
            //Print(7);
           
            ob8[i] := StarWPF.Create(350, 400, 5, 2.5, 20, RGB(R[j], g[j], b[j]));
           
            ob8[i].Scale(s[j] / 10);
            ob8[i].rotate(ag[j]);
          end;
          for var i := 1 to 90 do
          begin
           
            tr[i].AddChild(ob8[i], Alignment.Center);
            ob8[i].MoveTo(x[j], z[j]);
           
          end;
         
          for var i := 91 to 180 do
          begin
            ob8[i].rotate((360 - ag[j]) * 2);
            tr[i].AddChild(ob8[i], Alignment.Center);
            if ((x[j] - 71) > 0) then
            begin
              ob8[i].MoveTo(x[j] - (x[j] - 71) * 2 - ob8[i].ScaledWidth, z[j]);
            end
                       else
            begin
              ob8[i].MoveTo(x[j] + (71 - x[j]) * 2 - ob8[i].ScaledWidth, z[j]);
            end;
           
          end;
        end;
      6:
        begin
          for var i := 1 to 180 do
          begin
            //Print(6);
           
            ob7[i] := StarWPF.Create(350, 300, 5, 1, 100, RGB(R[j], g[j], b[j]));
           
            ob7[i].Scale(s[j] / 10);
            ob7[i].rotate(ag[j]);
          end;
          for var i := 1 to 90 do
          begin
           
            tr[i].AddChild(ob7[i], Alignment.Center);
            ob7[i].MoveTo(x[j], z[j]);
           
          end;
         
          for var i := 91 to 180 do
          begin
            ob7[i].rotate((360 - ag[j]) * 2);
            tr[i].AddChild(ob7[i], Alignment.Center);
            if ((x[j] - 71) > 0) then
            begin
              ob7[i].MoveTo(x[j] - (x[j] - 71) * 2 - ob7[i].ScaledWidth, z[j]);
            end
                       else
            begin
              ob7[i].MoveTo(x[j] + (71 - x[j]) * 2 - ob7[i].ScaledWidth, z[j]);
            end;
           
          end;
        end;
      5:
        begin
          for var i := 1 to 180 do
          begin
            //Print(5);
           
            ob6[i] := StarWPF.Create(150, 200, 5, 2, 2, RGB(R[j], g[j], b[j]));
           
            ob6[i].Scale(s[j] / 10);
            ob6[i].rotate(ag[j]);
          end;
          for var i := 1 to 90 do
          begin
           
            tr[i].AddChild(ob6[i], Alignment.Center);
            ob6[i].MoveTo(x[j], z[j]);
           
          end;
         
          for var i := 91 to 180 do
          begin
            ob6[i].rotate((360 - ag[j]) * 2);
            tr[i].AddChild(ob6[i], Alignment.Center);
            if ((x[j] - 71) > 0) then
            begin
              ob6[i].MoveTo(x[j] - (x[j] - 71) * 2 - ob6[i].ScaledWidth, z[j]);
            end
                       else
            begin
              ob6[i].MoveTo(x[j] + (71 - x[j]) * 2 - ob6[i].ScaledWidth, z[j]);
            end;
           
          end;
        end;
      4:
        begin
          for var i := 1 to 180 do
          begin
            //Print(4);
           
            SetLength(pt, 22);
            pt[0] := (4, 0);
            pt[1] := (5, 0);
            pt[2] := (6, 1);
            pt[3] := (5, 2);
            pt[4] := (5, 3);
            pt[5] := (6, 4);
            pt[6] := (5, 5);
            pt[7] := (6, 6);
            pt[8] := (5, 7);
            pt[9] := (5, 8);
            pt[10] := (6, 9);
            pt[11] := (5, 10);
            pt[12] := (4, 10);
            pt[13] := (3, 9);
            pt[14] := (4, 8);
            pt[15] := (4, 7);
            pt[16] := (3, 6);
            pt[17] := (4, 5);
            pt[18] := (3, 4);
            pt[19] := (4, 3);
            pt[20] := (4, 2);
            pt[21] := (3, 1);
            ob5[i] := PolygonWPF.Create(pt, RGB(R[j], g[j], b[j]));
            ob5[i].Scale(s[j] / 10);
            ob5[i].rotate(ag[j]);
          end;
          for var i := 1 to 90 do
          begin
           
            tr[i].AddChild(ob5[i], Alignment.Center);
            ob5[i].MoveTo(x[j], z[j]);
           
          end;
         
          for var i := 91 to 180 do
          begin
            ob5[i].rotate((360 - ag[j]) * 2);
            tr[i].AddChild(ob5[i], Alignment.Center);
            if ((x[j] - 71) > 0) then
            begin
              ob5[i].MoveTo(x[j] - (x[j] - 71) * 2 - ob5[i].ScaledWidth, z[j]);
            end
                       else
            begin
              ob5[i].MoveTo(x[j] + (71 - x[j]) * 2 - ob5[i].ScaledWidth, z[j]);
            end;
           
          end;
        end;
      3:
        begin
          for var i := 1 to 180 do
          begin
            //Print(3);
            SetLength(pt, 60);
            pt[0] := (5, 2);
            pt[1] := (4, 1);
            pt[2] := (5, 0);
            pt[3] := (6, 1);
            pt[4] := (5, 2);
            pt[5] := (6, 3);
            pt[6] := (7, 3);
            pt[7] := (7, 2);
            pt[8] := (8, 2);
            pt[9] := (8, 1);
            pt[10] := (9, 1);
            pt[11] := (9, 2);
            pt[12] := (8, 2);
            pt[13] := (8, 3);
            pt[14] := (7, 3);
            pt[15] := (7, 4);
            pt[16] := (8, 5);
            pt[17] := (9, 4);
            pt[18] := (10, 5);
            pt[19] := (9, 6);
            pt[20] := (8, 5);
            pt[21] := (7, 6);
            pt[22] := (7, 7);
            pt[23] := (8, 7);
            pt[24] := (8, 8);
            pt[25] := (9, 8);
            pt[26] := (9, 9);
            pt[27] := (8, 9);
            pt[28] := (8, 8);
            pt[29] := (7, 8);
            pt[30] := (7, 7);
            pt[31] := (6, 7);
            pt[32] := (5, 8);
            pt[33] := (6, 9);
            pt[34] := (5, 10);
            pt[35] := (4, 9);
            pt[36] := (5, 8);
            pt[37] := (4, 7);
            pt[38] := (3, 7);
            pt[39] := (3, 8);
            pt[40] := (2, 8);
            pt[41] := (2, 9);
            pt[42] := (1, 9);
            pt[43] := (1, 8);
            pt[44] := (2, 8);
            pt[45] := (2, 7);
            pt[46] := (3, 7);
            pt[47] := (3, 6);
            pt[48] := (2, 5);
            pt[49] := (1, 6);
            pt[50] := (0, 5);
            pt[51] := (1, 4);
            pt[52] := (2, 5);
            pt[53] := (3, 4);
            pt[54] := (3, 2);
            pt[55] := (1, 2);
            pt[56] := (1, 1);
            pt[57] := (2, 1);
            pt[58] := (2, 3);
            pt[59] := (4, 3);
           
            ob4[i] := PolygonWPF.Create(pt, RGB(R[j], g[j], b[j]));
            ob4[i].Scale(s[j] / 10);
            ob4[i].rotate(ag[j]);
          end;
          for var i := 1 to 90 do
          begin
           
            tr[i].AddChild(ob4[i], Alignment.Center);
            ob4[i].MoveTo(x[j], z[j]);
           
          end;
         
          for var i := 91 to 180 do
          begin
            ob4[i].rotate((360 - ag[j]) * 2);
            tr[i].AddChild(ob4[i], Alignment.Center);
            if ((x[j] - 71) > 0) then
            begin
              ob4[i].MoveTo(x[j] - (x[j] - 71) * 2 - ob4[i].ScaledWidth, z[j]);
            end
                       else
            begin
              ob4[i].MoveTo(x[j] + (71 - x[j]) * 2 - ob4[i].ScaledWidth, z[j]);
            end;
           
          end;
        end;
      2:
        begin
          for var i := 1 to 180 do
          begin
            SetLength(pt, 24);
            //Print(2);
            pt[0] := (5, 0);
            pt[1] := (6, 1);
            pt[2] := (7, 1);
            pt[3] := (6, 2);
            pt[4] := (6, 3);
            pt[5] := (7, 4);
            pt[6] := (6, 5);
            pt[7] := (7, 6);
            pt[8] := (6, 7);
            pt[9] := (6, 8);
            pt[10] := (7, 9);
            pt[11] := (6, 9);
            pt[12] := (5, 10);
            pt[13] := (4, 9);
            pt[14] := (3, 9);
            pt[15] := (4, 8);
            pt[16] := (4, 7);
            pt[17] := (3, 6);
            pt[18] := (4, 5);
            pt[19] := (3, 4);
            pt[20] := (4, 3);
            pt[21] := (4, 2);
            pt[22] := (3, 1);
            pt[23] := (4, 1);
           
           
            ob3[i] := PolygonWPF.Create(pt, RGB(R[j], g[j], b[j]));
            ob3[i].Scale(s[j] / 10);
            ob3[i].rotate(ag[j]);
          end;
          for var i := 1 to 90 do
          begin
           
            tr[i].AddChild(ob3[i], Alignment.Center);
            ob3[i].MoveTo(x[j], z[j]);
           
          end;
         
          for var i := 91 to 180 do
          begin
            ob3[i].rotate((360 - ag[j]) * 2);
            tr[i].AddChild(ob3[i], Alignment.Center);
            if ((x[j] - 71) > 0) then
            begin
              ob3[i].MoveTo(x[j] - (x[j] - 71) * 2 - ob3[i].ScaledWidth, z[j]);
            end
                       else
            begin
              ob3[i].MoveTo(x[j] + (71 - x[j]) * 2 - ob3[i].ScaledWidth, z[j]);
            end;
           
          end;
        end;
      1:
        begin
          for var i := 1 to 180 do
          begin
            SetLength(pt, 24);
            //Print(1);
            pt[0] := (0, 0);
            pt[1] := (1, 0);
            pt[2] := (3, 1);
            pt[3] := (4, 4);
            pt[4] := (4, 3);
            pt[5] := (5, 3);
            pt[6] := (5, 4);
            pt[7] := (6, 1);
            pt[8] := (8, 0);
            pt[9] := (9, 0);
            pt[10] := (9, 5);
            pt[11] := (7, 6);
            pt[12] := (9, 7);
            pt[13] := (8, 10);
            pt[14] := (7, 10);
            pt[15] := (5, 8);
            pt[16] := (5, 9);
            pt[17] := (4, 9);
            pt[18] := (4, 8);
            pt[19] := (2, 10);
            pt[20] := (1, 10);
            pt[21] := (0, 7);
            pt[22] := (2, 6);
            pt[23] := (0, 5);
           
            ob2[i] := PolygonWPF.Create(pt, RGB(R[j], g[j], b[j]));
            ob2[i].Scale(s[j] / 10);
            ob2[i].rotate(ag[j]);
          end;
          for var i := 1 to 90 do
          begin
           
            tr[i].AddChild(ob2[i], Alignment.Center);
            ob2[i].MoveTo(x[j], z[j]);
           
          end;
         
          for var i := 91 to 180 do
          begin
            ob2[i].rotate((360 - ag[j]) * 2);
            tr[i].AddChild(ob2[i], Alignment.Center);
            if ((x[j] - 71) > 0) then
            begin
              ob2[i].MoveTo(x[j] - (x[j] - 71) * 2 - ob2[i].ScaledWidth, z[j]);
            end
                       else
            begin
              ob2[i].MoveTo(x[j] + (71 - x[j]) * 2 - ob2[i].ScaledWidth, z[j]);
            end;
           
          end;
        end;
      0:
        begin
          for var i := 1 to 180 do
          begin
            SetLength(pt, 10);
            //Print(0);
            pt[0] := (2, 0);
            pt[1] := (4, 0);
            pt[2] := (5, 2);
            pt[3] := (6, 0);
            pt[4] := (8, 0);
            pt[5] := (10, 2);
            pt[6] := (10, 4);
            pt[7] := (5, 10);
            pt[8] := (0, 4);
            pt[9] := (0, 2);
           
            ob1[i] := PolygonWPF.Create(pt, RGB(R[j], g[j], b[j]));
            ob1[i].Scale(s[j] / 10);
            ob1[i].rotate(ag[j]);
          end;
          for var i := 1 to 90 do
          begin
           
            tr[i].AddChild(ob1[i], Alignment.Center);
            ob1[i].MoveTo(x[j], z[j]);
           
          end;
         
          for var i := 91 to 180 do
          begin
            ob1[i].rotate((360 - ag[j]) * 2);
            tr[i].AddChild(ob1[i], Alignment.Center);
            if ((x[j] - 71) > 0) then
            begin
              ob1[i].MoveTo(x[j] - (x[j] - 71) * 2 - ob1[i].ScaledWidth, z[j]);
            end
                       else
            begin
              ob1[i].MoveTo(x[j] + (71 - x[j]) * 2 - ob1[i].ScaledWidth, z[j]);
            end;
           
          end;
        end;
    end;
  end;
  for var i := 1 to 30 do
  begin
    tr[(i - 1) * 3 + 1 + 90].Rotate(300);
    tr[(i - 1) * 3 + 2].Rotate(240);
    tr[(i - 1) * 3 + 2 + 90].Rotate(180);
    tr[(i - 1) * 3 + 3].Rotate(120);
    tr[(i - 1) * 3 + 3 + 90].Rotate(60);
  end;
  for q := 1 to 7 do
  begin
    su := su + 1;
    He[su] := RegularPolygonWPF.Create(0, 0, tr[1].Width, 6, RGB(255, 0, 255));
    He[su].Rotate(90);
   
    he[su].AddChild(tr[(su - 1) * 3 + 1], Alignment.Center);
    he[su].AddChild(tr[(su - 1) * 3 + 2], Alignment.Center);
    he[su].AddChild(tr[(su - 1) * 3 + 3], Alignment.Center);
    he[su].AddChild(tr[(su - 1) * 3 + 90 + 1], Alignment.Center);
    he[su].AddChild(tr[(su - 1) * 3 + 90 + 2], Alignment.Center);
   
    he[su].AddChild(tr[(su - 1) * 3 + 90 + 3], Alignment.Center);
    He[su].MoveTo((q - 2) * 123 * 2, 0+50);
    // Print (he[q].LeftTop);
    tr[(su - 1) * 3 + 90 + 1].MoveTo(-17.758, -30.756);
    tr[(su - 1) * 3 + 2].MoveTo(-17.758, 30.757 - tr[2].Height); 
    tr[(su - 1) * 3 + 90 + 2].MoveTo(-71, -tr[5].Height);
    tr[(su - 1) * 3 + 3].MoveTo(17.757 - tr[3].Width, 30.757 - tr[5].Height);
    tr[(su - 1) * 3 + 90 + 3].MoveTo(17.757 - tr[6].Width, -30.757);
    tr[(su - 1) * 3 + 1]. MoveTo(-71, 0);
    He[su].Visible := false;
   
   
  end;
  for q := 1 to 8 do
  begin
    su := su + 1;
    He[su] := RegularPolygonWPF.Create(0, 0, tr[1].Width, 6, RGB(255, 0, 255));
    He[su].Rotate(90);
   
    he[su].AddChild(tr[(su - 1) * 3 + 1], Alignment.Center);
    he[su].AddChild(tr[(su - 1) * 3 + 2], Alignment.Center);
    he[su].AddChild(tr[(su - 1) * 3 + 3], Alignment.Center);
    he[su].AddChild(tr[(su - 1) * 3 + 90 + 1], Alignment.Center);
    he[su].AddChild(tr[(su - 1) * 3 + 90 + 2], Alignment.Center);
    he[su].AddChild(tr[(su - 1) * 3 + 90 + 3], Alignment.Center);
    He[su].MoveTo((q - 3) * 123 * 2 + 123, 71 + 142+50);
    // Print (he[q].LeftTop);
    tr[(su - 1) * 3 + 90 + 1].MoveTo(-17.758, -30.756);
    tr[(su - 1) * 3 + 2].MoveTo(-17.758, 30.757 - tr[2].Height); 
    tr[(su - 1) * 3 + 90 + 2].MoveTo(-71, -tr[5].Height);
    tr[(su - 1) * 3 + 3].MoveTo(17.757 - tr[3].Width, 30.757 - tr[5].Height);
    tr[(su - 1) * 3 + 90 + 3].MoveTo(17.757 - tr[6].Width, -30.757);
    tr[(su - 1) * 3 + 1]. MoveTo(-71, 0);
    He[su].Visible := false;
   
   
  end;
  for q := 1 to 7 do//gggggggggg
  begin
    su := su + 1;
    He[su] := RegularPolygonWPF.Create(0, 0, tr[1].Width, 6, RGB(255, 0, 255));
    He[su].Rotate(90);
   
    he[su].AddChild(tr[(su - 1) * 3 + 1], Alignment.Center);
    he[su].AddChild(tr[(su - 1) * 3 + 2], Alignment.Center);
    he[su].AddChild(tr[(su - 1) * 3 + 3], Alignment.Center);
    he[su].AddChild(tr[(su - 1) * 3 + 90 + 1], Alignment.Center);
    he[su].AddChild(tr[(su - 1) * 3 + 90 + 2], Alignment.Center);
   
    he[su].AddChild(tr[(su - 1) * 3 + 90 + 3], Alignment.Center);
    He[su].MoveTo((q - 2) * 123 * 2, (71 + 142) * 2+50);
    // Print (he[q].LeftTop);
    tr[(su - 1) * 3 + 90 + 1].MoveTo(-17.758, -30.756);
    tr[(su - 1) * 3 + 2].MoveTo(-17.758, 30.757 - tr[2].Height); 
    tr[(su - 1) * 3 + 90 + 2].MoveTo(-71, -tr[5].Height);
    tr[(su - 1) * 3 + 3].MoveTo(17.757 - tr[3].Width, 30.757 - tr[5].Height);
    tr[(su - 1) * 3 + 90 + 3].MoveTo(17.757 - tr[6].Width, -30.757);
    tr[(su - 1) * 3 + 1]. MoveTo(-71, 0);
    He[su].Visible := false;
   
   
  end;
 
  for q := 1 to 8 do
  begin
    su := su + 1;
    He[su] := RegularPolygonWPF.Create(0, 0, tr[1].Width, 6, RGB(255, 0, 255));
    He[su].Rotate(90);
   
    he[su].AddChild(tr[(su - 1) * 3 + 1], Alignment.Center);
    he[su].AddChild(tr[(su - 1) * 3 + 2], Alignment.Center);
    he[su].AddChild(tr[(su - 1) * 3 + 3], Alignment.Center);
    he[su].AddChild(tr[(su - 1) * 3 + 90 + 1], Alignment.Center);
    he[su].AddChild(tr[(su - 1) * 3 + 90 + 2], Alignment.Center);
    he[su].AddChild(tr[(su - 1) * 3 + 90 + 3], Alignment.Center);
    He[su].MoveTo((q - 3) * 123 * 2 + 123, (71 + 142) * 3+50);
    // Print (he[q].LeftTop);
    tr[(su - 1) * 3 + 90 + 1].MoveTo(-17.758, -30.756);
    tr[(su - 1) * 3 + 2].MoveTo(-17.758, 30.757 - tr[2].Height); 
    tr[(su - 1) * 3 + 90 + 2].MoveTo(-71, -tr[5].Height);
    tr[(su - 1) * 3 + 3].MoveTo(17.757 - tr[3].Width, 30.757 - tr[5].Height);
    tr[(su - 1) * 3 + 90 + 3].MoveTo(17.757 - tr[6].Width, -30.757);
    tr[(su - 1) * 3 + 1]. MoveTo(-71, 0);
    He[su].Visible := false;
   
   
  end;
end.

А вот несколько картинок, которые она выдала: