Код: Код:
USES Crt, / работа с файлами
Math, / математические функции
Dos; / для открытия готового файла во внешней программе
CONST N = 6; / количество осей новой системы
Angle = PI*(N-4)/(N*2);
PIx2 = Pi*2; / полный угол
VAR Width, / ширина изображения в пикселах
Height : Dword; / высота изображения в пикселах
Zoom : Real; / величина изменения масштаба узора
TGA : Text;
Wm,Wd,
Hm,Hd : Byte;
fromX,toX,
fromY,toY,
X,Y : Integer; / счётчики
C : Array [0..N-1] Of Real;
Bytes, / счётчик байтов
Meter : Byte; / счётчик
Color,k : Real;
PROCEDURE WriteInfo; / процедура записи информации
Begin / об изображении
Wm:= Width Mod 256;
Wd:= Width Div 256;
Hm:=Height Mod 256;
Hd:=Height Div 256;
Write(TGA,chr($00)+chr($00)+chr($01)+chr($00)+
chr($00)+chr($00)+chr($00)+chr($00)+
chr($00)+chr($00)+chr($00)+chr($00)+
chr(Wm )+chr(Wd )+chr(Hm )+chr(Hd )+
chr($18)+chr($00));
End;
PROCEDURE Convert; / процедура преобразования координат
Begin
C[0]:=(-Y/Cos(Angle))/Zoom;
C[1]:=(X-Y*Tan(Angle))/Zoom;
for Meter:=2 to N-1 do
C[Meter]:=C[Meter-1]*Sin(Angle)*2-C[Meter-2];
End;
PROCEDURE WritePixel; / процедура записи цветовой карты
Begin
for Bytes:=0 to 2 do / 3 байта = 1 пиксел
begin
Color:=0; / обнуление
for Meter:=0 to N-1 do / в формулу включены
begin / все N координат
k:=C[(Meter+Bytes) Mod N];
Color:=Color+Cos(k*Cos(k*Bytes));
end;
write(TGA,Chr(Round(Cos(Color)*255)));
end;
End;
BEGIN
Width :=512;
Height:=512;
Zoom :=Width/(Pi*6);
AsSign(TGA,'C:\Sym-Metry.tga');
ReWrite(TGA); / создаём файл и открываем его для записи
WriteInfo;
fromX:=(-Width-1) Div 2+1;
toX:=Width Div 2;
fromY:=(-Height-1) Div 2+1;
toY:=Height Div 2;
For Y:=fromY To toY Do
For X:=fromX To toX Do
Begin
Convert;
WritePixel;
End;
Close(TGA); / закрываем файл изображения
Exec('C:\Program Files\Futurix Imager\fximager.exe',
'C:\Sym-Metry.tga'); / открываем в просмотровщике
END.