Информационный сервер для программистов: Исходники со всего света. Паскальные исходники со всего света
  Powered by Поисковый сервер Яndex: Найдется ВСЁ!
На Главную Pascal Форум Информер Страны мира
   Статьи о Паскале    >>    Графика на WEB страничке
   
 
 Этюды о бесполезной красоте - Графика на WEB страничке    Евгений Скляревский 25.09.2001


Этюды о бесполезной красоте. Этюд 2 - Графика на WEB страничке.
Об использовании тригонометрических функций для создания красивых графических заставок и скрин-сэйверов на TMT Pascal.


60k 
 

Автор:   Евгений Скляревский
Адаптация для TMT Pascal:        Валерий Вотинцев


Оригинал статьи для Visual Basic: Журнал Hard'n'Soft
Этюды о бесполезной красоте

Этюд второй. Графика на WEB страничке

Завести домашнюю страничку сейчас проще простого: «застолбил» имя на бесплатном сервере (http://www.boom.ru/, http://www.narod.ru/ или др.), оформил сайт в Microsoft Word или FrontPage, скопировал файлы, зарегистрировался везде, где только можно - и пожинай прелести всемирной славы. Одна беда: никто, кроме автора и поисковых роботов, на нее не заглядывает, потому как фотография типа «Мы с Толяном в походе у костра» интересна только Толяну, а рекомендации по выбору «Порше» в предыдущей версии игры Need for Speed могут привлечь парочку фанатов, но повторно они уже не зайдут. Можно еще насобирать в Сети афоризмов или советов по оформлению и продвижению сайтов, но это только придаст страничке нафталиновый дух.

А вот что сделает ваш сайт действительно оригинальным, так это галерея компьютерной графики! Многие под этим понятием понимают фантастические пейзажи, созданные в 3D MAX натягиванием текстур на объемные тела с эффектной подсветкой. При всем уважении к кропотливости такой работы мы пойдем путем чисто математическим.

Скопируйте приведенную ниже программу в окно компилятора TMT Pascal и запустите программу.

(***********************************************)
(* Screen Saver                                *)
(* Автор алгоритма: Евгений Скляревский (VB)   *)
(* ------------------------------------------- *)
(* Адаптация для TMT Pascal:                   *)
(*                  Валерий Вотинцев           *)
(*   MS-DOS 32-bit protected mode              *)
(*   Win32 Console application                 *)
(*   Win32 GUI                                 *)
(***********************************************)
uses CRT, Graph;
var
  x, y, ss, xmax, ymax, col: longint;
  r, qx, qy, fi: extended;
  coeff1, coeff2, coeff3, coeff4,coeff5, coeff6: extended;
  ColDepth: word;
  red, green, blue: byte;
begin
  xmax     := 800;  // Разрешение по горизонтали
  ymax     := 600;  // Разрешение по вертикали
  ColDepth := 16;   // Максимальная глубина цвета (бит на пиксел)
  Coeff1   := 500;  // Начальные
  Coeff2   := 0.5;  //    коэффициенты
  Coeff3   := 1.95; //       для
  Coeff4   := 500;  //          формул
  Coeff5   := 1.5;
  Coeff6   := 1.85;
  r        := 282;
  fi       := Pi / xmax * 2 + 0.001;
  ss       := 0;   // Метод отрисовки "торца" цветной пластины
                   // ss = 0 ->   торец не рисуется
                   // ss > 1 ->   "толщина" торца в пикселах
  // Установим графический режим
  SetSVGAMode(xmax,ymax,ColDepth,LFBorBanked);
  if GraphResult<>grOk then begin    // Проверка результата
    Writeln('Mode not supported..');
    Halt(0);
  end;
{1} {Randomize;}
{2} {Repeat}
{3} {r      := 8 + Random(1024);
    Coeff1 := 1 + Random(1000);
    Coeff2 := 0.01 + Random(5);
    Coeff3 := 0.01 + Random(5);
    Coeff4 := 1 + Random(1000);
    Coeff5 := 0.01 + Random(5);
    Coeff6 := 0.01 + Random(5);
}
    For y := 0 To pred(ymax) do begin
      For x := 0 To pred(xmax) do begin
        qx := r * (Sin(fi * x * y / Coeff1) - Coeff2 * Sin(Coeff3 * fi * y));
        qy := r * (Sin(fi * y * x / Coeff4) - Coeff5 * Sin(Coeff6 * fi * x));
        red   := trunc(Abs(qy)) Mod 256;
        green := trunc(Abs(qy + qx)) Mod 256;
        blue  := trunc(Abs(qx)) Mod 256;
        SetColor(RGBColor(red, green, blue));
        If (ss > 1) Then
           Line (x, y, x+ss, y+ss)
        else PutPixel(x,y);
        If keypressed then break;
      end;
    end;
{4} {until keypressed;}   // Когда надоест - нажмем Any Key
  ReadKey;                // Считываем нажатую клавишу
  CloseGraph;
end.

Уверен, что ничего красивее вы на своем экране не видели! Программа несложная. Объявляются два цикла: по х и y проходятся все точки экрана. Рисуются они цветами, зависящими от этих x и y самым причудливым образом, описанным переменными qx и qy.


Попробуйте поменять параметры в этих переменных. Для этого просто уберите комментарии с блока операторов для вычисления случайных коэффициентов {3}, и вы получите новые картины для своей галереи.

Если снять комментарии вокруг операторов Repeat {2} и until keypressed {4}, то картины будут меняться автоматически случайным образом, заставляя зрителей вскрикивать от восхищения. Чтобы при каждом запуске программы картины не повторялись, удалите комментарии и с процедуры Randomize {1}.

В таком виде программу можно использовать как «скринсейвер» или даже «генератор текстур», и выложить ее на сайте в разделе «Мой софт» :)