02
дек
2011

Симметричные узоры [2012, Картинки]

Симметричные узоры

Симметричные узоры
Жанр: Картинки

Количество файлов: 108

Разрешение: От 1024x1024 до 2048x2048

Формат: png, gif

Описание:

Раздача состоит из 99 калейдоскопических статичных узоров и 9 спиралей.
::Использованное программное обеспечение::
IDE Free Pascal (для записи .tga файла), FuturixImager (для просмотра полученного при помощи Паскаля и небольшого редактирования), ArcSoft PhotoStudio (это аналог Adobe PhotoShop, который применялся для более точного редактирования).
::Порядок действий::
Сначала составляется несжатый .tga файл с глубиной цвета 24 бит. Это значит, что цвет каждого пиксела описывается тремя байтами, а размер изображения составляет 3 Б*1024*1024 = 3 Мб.
Затем .tga надо сжать в .png или .gif, в зависимости от богатства палитры, присутствующей в узоре. Выходной файл величиной от несколько сотен килобайт до примерно двух мегабайт. .tga отправляется на хранение (на всякий случай), а конечный продукт — либо в раздачу, либо на редактирование (если не понравился). Бывает необходимость изменить яркость, контрастность, оттенок, насыщенность, тени, тона, повернуть или отразить.

::Получение исходного изображения::
Картинку составляла программа, написанная на языке Pascal. Она записывает 3.000.000 символов (байт) за 3 секунды. Но система координат, которая используется в форматах изображений — прямоугольная, и узоры получатся четырёхсторонними. Чтобы получить узор степени симметрии N, нужна система координат с количеством осей равным N (у декартовой их четыре, но из-за совпадения отрицательного направления оси абсцисс и третьей оси, а также отрицательного направления оси ординат и четвёртой оси последние две оси не учитывают).
Для преобразования координат родной декартовой системы в координаты N-осной системы с углом между любыми двумя осями равным PI*2 / N следует применять формулу:

c[1] = x-y*Tan(Angle) — ось, совпадающая с осью абсцисс
c[0] = -y/Cos(Angle) — это последняя ось (если идти против часовой стрелки от оси c[1])
c[k] = c[k-1]*Sin(Angle)*2-c[k-2], k принимает значения от 2 до N-1.
Angle = PI*(N-4)/(N*2). Для удобства конечной оси присвоен номер 0.

Текст программы
Код:

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 FilesFuturix Imagerfximager.exe',
'C:Sym-Metry.tga'); // открываем в просмотровщике
END.