Узор №1

С помощью этого примера вы сможете создать очень красивые узоры. Этот проект основан на движении точек друг к другу.

посмотреть скриншоты

Поместите на форму объект Image, находящийся на вкладке Additional и объект Timer, находящийся на вкладке System.

для этого примера нам потребуется немного переменных и всего одна константа.

const colvo =6// не делайте  значение этой константы больше 90.

var

      a:array[1..colvo] of tpoint;

      v,rad,num,r,g,b:integer;

      s:real;

константа colvo – отвечает за кол-во вершин правильного многоугольника.

Инициализируем переменные:

procedure init;

var i,j:integer;

begin

  v:=15; // скорость сближения точек

  rad:=300; // радиус окружности в которую вписан наш многоугольник.

  randomize;

  for i:=1 to colvo do

  begin

    a[i].x:=(round(rad*cos(pi*i*(360 div colvo)/180))+1048 div 2);

    a[i].y:=(round(rad*sin(pi*i*(360 div colvo)/180))+768 div 2);

  end;

  form1.image1.canvas.moveto(a[1].x,a[1].Y);

  form1.image1.canvas.Brush.Color:=clblack;// наиболее сочетающийся с линейными узорами цвет фона - черный

  form1.image1.canvas.Rectangle(0,0,form1.image1.Width,form1.image1.Height);

end;

 

эту процедуру нужно вставить в процедуру создания формы – для этого нужно два раза щелкнуть на форме и написать «Init»

единственное, что требует комментариев – «360 div colvo» -мы делим окружность на равные части и расставляем точки на ней.

Теперь подвинем точки одна к другой.

procedure move(var n,v:integer);

var x2,y2:real;

begin

  if n=1 then

  begin

    x2:=a[colvo].X;y2:=a[colvo].Y; // к первой точке двигается последняя

  end else

  begin

    x2:=a[n-1].x;

    y2:=a[n-1].Y;

  end;

  s:=sqrt(sqr(x2-a[n].x)+sqr(y2-a[n].y)); // считаем расстояние между точками

  if s<=v then exit; // строчка в принципе не обязательная

  a[n].x:=round(a[n].x+v*(-a[n].x+x2)/s);

  a[n].y:=round(a[n].y+v*(y2-a[n].y)/s);

end;

дальше надо прорисовать то, что мы сделали

вариантов много – я покажу вам два: линейный и с помощью кругов.

procedure draw(x1,y1,n1,n2,n3:integer);

begin

  form1.image1.Canvas.brush.Color:=tcolor(rgb(n1,n2,n3));

  form1.image1.Canvas.Pen.Color:=tcolor(rgb(n1,n2,n3));

  form1.Image1.Canvas.LineTo(x1,y1); // линейный вариант

  form1.image1.Canvas.Ellipse(x1-5,y1-5,x1+5,y1+5); // с помощью кругов (оставить нужное)

end;

теперь нужно все это совместить

procedure cikl;

var i:integer;

begin

  for i:=1 to colvo do

  begin

    r:=255;

    g:=round(s/2); //наш рисунок будет

    b:=round(s/2); //темнеть к центру, но вариантов с цветом очень много.

    draw(a[i].x,a[i].Y,r,g,b); // r,g,b: переменные отвечающие за составляющие цвета

    move(i,v);

  end;

end;

чтобы все это работало поместим эту процедуру на таймер.

Дальше если мы хотим сохранить наш узор.

Нажмите двойным щелчком на Image1 и напишите такую строку

  form1.image1.picture.savetofile('c:\мои документы\круто.bmp');

  close;

Вот, собственно, и все. Попробуйте изменять параметры v, rad, colvo – можете получить очень интересные результаты.

Посмотреть весь текст

Hosted by uCoz