[ главная ]   [ рейтинг статей ]   [ справочник радиолюбителя ]   [ новости мира ИТ ]



Ответов: 0
25-02-12 07:01







   Web - программирование
PHP


ASP






XML



CSS

SSI





   Программирование под ОС











   Web - технологии








   Базы Данных









   Графика






Данные




Программирование под ОС / Алгоритмы /

Графические эффекты: пламя

Заведем два массива 1 и 2 - один массив будет содержать текущий кадр пламени,а во второй мы будем заносить результаты вычислений. Создадим палитру пламени от 250 до 100 это будет сплошной белый цвет - пламя в очаге. Далее белый, плавно проходя через желтый, перейдет в красный и черный. Эту палитру можете посмотреть если определен Debug.

В чем состоит основа алгоритма - для каждой точки из массива 1, мы делаем следующее : берем сумму всех окружающих ее точек и делим на их количество. Для хорошего качества точек берем 8. Что же получается? Если очаг пламени организовать внизу, т.е. внизу на каждом шаге случайно ставить точки с большим значением, усреденные суммы дадут нужное затухание. Т.к. мы ставим в очаге точки случайно , то появляются красивые языки.

Последовательность действий:

  • Массив 1 содержит текущий кадр пламени.
  • Создаем в массиве 1 внизу случайные очаги ( просто ставим точки)
  • Каждый элемент массива 2 получаем как усреденную сумму, соответствующих элементов окружающий данный в массиве 1
  • Массив 2 копируем на экран
  • Переносим массив 2 в массив 1
  • Переход на начало
Для программы требуется модуль demovga.pas
{.$DEFINE DEBUG} 
Program Fire; 
 
Uses DemoVga,Crt; 
 
Type 
   PFireMem = ^TFireMem; 
   TFireMem = Array[0..201,0..319] Of Byte; 
Var 
   FireMem        : PFireMem; 
   I,J            : Integer; 
   R,G,B,dR,dG,dB : Real; 
 
Procedure PlotFireHead; 
Var 
  I : Integer; 
Begin 
 For I := 0 To 319 Do 
  If Random( 2) = 1 Then Begin 
   FireMem^[ 199] [ I] := 255; 
   FireMem^[ 198] [ I] := 255; 
  End; 
End; 
 
Procedure FireLoop; Assembler; 
Asm 
   Push    DS 
   Les           DI,DBuffer 
   Lds           SI,FireMem 
   Add           SI,320*2 
   Mov           CX,64000 
@@F: 
   Xor           AX,AX 
   Add           AL,[SI-321] 
   Adc           AH,0 
   Add           AL,[SI-320] 
   Adc           AH,0 
   Add           AL,[SI-319] 
   Adc           AH,0 
   Add           AL,[SI-1] 
   Adc           AH,0 
   Add           AL,[SI+1] 
   Adc           AH,0 
   Add           AL,[SI+319] 
   Adc           AH,0 
   Add           AL,[SI+320] 
   Adc           AH,0 
   Add           AL,[SI+321] 
   Adc           AH,0 
   Shr           AX,3 
   Or           AL,AL 
   Jz           @@1 
   Dec           AL 
@@1: 
   Stosb 
   Inc           SI 
   Loop    @@F 
   Pop           DS 
End; 
 
Begin 
 InitDemoPart; 
 GetMem( FireMem, 65000); 
 R := 0; G := 0; B := 0; 
 dR := 0.63; dG := 0.91; dB := 1.5; 
 For I := 1 To 100 Do Begin 
  SetRGBColor( I, Round( R), Round( G), Round( B)); 
  R := R + dR; 
  If I > 30 Then G := G + dG; 
  If I > 60 Then B := B + dB; 
 End; 
 For I := 100 To 250 Do SetRGBColor( I, 60, 60, 60); 
{$IFDEF DEBUG} 
 For I := 1 To 100 Do 
  For J := 1 To 100 Do 
   Mem[$A000: J * 320 + I] := I; 
 ReadKey; 
{$ENDIF} 
 FillChar( FireMem^, 65000, 0); 
 Repeat 
  PlotFireHead; 
  FireLoop; 
  Move( DBuffer^, FireMem^, 64000); 
  Move( DBuffer^, Ptr( $A000, 0)^, 64000-320*4); 
 Until KeyPressed; 
 ReadKey; 
 FreeMem( FireMem, 65000); 
 RestoreDemo; End; 



Комментарии

 Ваш комментарий к данному материалу будет интересен нам и нашим читателям!



Последние статьи: Программирование под ОС / Алгоритмы /

Основные понятия теории алгоритмов - часть первая
09-04-2009   

Алгоритмом часто называют конечную совокупность инструкций для решения некоторого класса задач. Это определение неформально, так как с его помощью нельзя однозначно ответить на вопросы, что такое совокупность инструкций и некоторый класс задач... подробнее

Кол. просмотров: общее - 3289 сегодня - 2

Основные понятия теории алгоритмов - часть вторая
09-04-2009   

В современной математике алгоритмами принято называть конструктивно задаваемые соответствия между словами в абстрактных алфавитах. Это определение, в свою очередь, использует два понятия – понятие абстрактного алфавита и слов в таком алфавите... подробнее

Кол. просмотров: общее - 3279 сегодня - 1

Основные понятия теории алгоритмов - часть третья
09-04-2009   

К наиболее простым алфавитным операторам относятся так называемые посимвольные отображения. Последнее состоит в том, что каждый символ входного слова алфавита А заменяется некоторым символом выходного алфавита В... подробнее

Кол. просмотров: общее - 3316 сегодня - 1

Основные понятия теории алгоритмов - часть четвертая
09-04-2009   

Понятие алфавитного оператора является чрезвычайно общим. К нему фактически сводятся или могут быть сведены любые процессы преобразования информации, поскольку символам алфавита можно поставить в соответствие объекты произвольной природы... подробнее

Кол. просмотров: общее - 3037 сегодня - 1

Оценка сложности алгоритмов
09-04-2009   

С каждым алгоритмом обычно связывается интуитивное представление о их сложности, основанное на оценке количества необходимых преобразований слов, а также количества и длины самих слов... подробнее

Кол. просмотров: общее - 3225 сегодня - 3



  WWW.COMPROG.RU - 2009-2012 | Designed and Powered by Zaipov Renat | Projects