procedure fractal (leng: byte; s: real);
var
tau,tau0,fi,fi0,x,y: real;
i: integer;
function mod2pi (x: real): real;
begin
if x<2*Pi then result:=x else result:=mod2pi(x-2*Pi);
end;
begin
with form1.Canvas do
begin
Rectangle(0,0,form1.ClientWidth,Form1.ClientHeight);
pen.Color:=clred;
x:=Form1.ClientWidth/2;
y:=Form1.ClientHeight/2;
moveTo (round(x),round(y));
x:=x+leng;
lineTo (round(x),round(y));
fi0:=0; tau0:=0;
for i:=1 to 10000 do
begin
Application.ProcessMessages;
tau:=mod2pi(tau0+2*Pi*s);
fi:=mod2pi(fi0+tau0);
x:=x+leng*cos(fi); y:=y-leng*sin(fi);
lineTo (round(x),round(y));
fi0:=fi; tau0:=tau;
end;
end;
end;
Lengg определяет длину отрезка и является константой, определённой в начале модуля. Придайте этой переменной начальное значение в пределах от 3 до 5 пикселей
На создание формы пишем код инициализации счётчика случайных чисел
Для непрерывной генерации новых фракталов добавляем на форму таймер и пишем код перерисовки рисунка
procedure TForm1.Timer1Timer(Sender: TObject);
var s: real;
begin
s:=sqrt(random(1000));
fractal (Lengg,s);
end;
Вместо подчёркнутой части кода можно писать различные иррациональные числа и будут получаться различные формы фракталов
Для нормальной работы хранителя его размер должен быть достаточно маленьким. Использование любого визуального компонента (в том числе и формы) увеличивает размер программы свыше 200 Кб. В нашем случае так и будет. Создание маленьких хранителей достаточно сложная задача
Описываем глобальную переменную
crs : TPoint; {первоначально расположение курсора мышки}
На событие показа формы (OnShow) пишем следующий код
WindowState := wsMaximized; {окошко будет на полный экран}
GetCursorPos(crs); {получаем позицию курсора}
Application.OnMessage := DeactivateScrSaver; {проверяем мышку/клавиатуру}
ShowCursor(false); {скрываем курсор}
{начинаем отображение скринсейвера...}
FormPaint(self);
При скрытии формы будет происходить возврат управления пользователю
Application.OnMessage := nil; {запрещаем сообщения}
ShowCursor(true); {возвращаем курсор назад}
Далее пишем процедуру проверки, не нажал ли пользователь клавишу или не сдвинул ли мышь
Достарыңызбен бөлісу: |