Узор №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 – отвечает за кол-во вершин правильного многоугольника.
Инициализируем переменные:
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» -мы делим окружность на равные части и расставляем точки на ней.
Теперь подвинем точки одна к другой.
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;
вариантов много – я покажу вам два: линейный и с помощью
кругов.
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;
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;