之前實現了算法生成火的圖像,現在我要做的是讓火動起來.似乎我在算法生成圖像的路上越來越走火入魔了.最近總在想一些挺無聊的東西,如雪花何以六出,閃電的形態是如何形成,還有就是火焰煙花的生成.在無風的室內點燃一支蠟燭,其火苗是不停變化的,是什么造成它的變化?據說法國拓撲學家托姆(R.Thom)曾和兩位古人類學家討論:“ 我們的祖先究竟是由於什么動機保存了火種?” 一位說是由於火可以取暖,另一位則認為是由於用火烹調的熟食其味道鮮美可口。而托姆則認為,人類保存火種的最原始動機是由於人在漫漫的黑夜中被光彩奪目的火苗所吸引,對美麗的火焰着了迷。這里不對托姆的觀點發表評論,只是讓大家被多姿多彩的分形幾何學的火苗所吸引,欣賞下算法的火焰!
火焰的本質是放熱反應中反應區周邊空氣分子加熱而高速運動,從而發光的現象。
火焰一般可分為三層:內層稱內焰,帶藍色,因為供氧不足,燃燒不完全,具有還原作用,所以也稱“還原焰”;中層明亮,溫度比內層高;外層稱外焰,為無色火焰,因為供氧充足,燃燒完全,溫度最高,具有氧化作用,所以又稱“氧化焰”。火焰正確地說是一種狀態或現象,燃燒着的可燃氣體,發光,發熱,閃爍而向上升。可燃液體或固體須先變成氣體,才能燃燒而生成火焰。主要由於可燃氣體被空氣中的或單純的氧氣氧化而發光發熱。
化學反應中當反應物總能量大於生成物總能量時,一部分能量以熱能形式向外擴散,稱為放熱反應。向外釋放的熱能在反應區周圍積聚,加熱周邊的空氣,使周邊空氣分子做高速運動,運動速度越快,溫度越高。火焰按照距反應區距離由近至遠分為:1、焰心,粒子運動速度低,光譜集中在紅外區,溫度低,亮度低。2、內焰,粒子運動速度中等,光譜集中在可見光部分,亮度較高,溫度較高。3、外焰,粒子運動速度最快,光譜集中在紫外區,溫度最高,亮度高。 反應區向外釋放的能量從焰心至外焰逐漸升高,然后急劇下降,使火焰有較清晰的輪廓,火焰與周圍空氣的邊界處即反應能量驟減處。
動畫原理是生成若干幅連續變化的圖像,對其進行播放.這需要先實現對圖像生成參數的插值過渡.生成的系列圖像如下:
然后將其合並成GIF圖像,如下圖所示:
說到九尾,多少和火影有些關系.這里每一幅火的圖像生成,有點像我愛羅的砂之忍術,算法中控制上千萬個點的位置,將點疊加到一個512*512的二維數組中.然后將這一數組轉化成圖像.有點佩服我愛羅了,他的砂之忍術可以將沙子實時生成三維的物體,這得有多大的計算量啊.我這里只是二維圖像,而且沒辦法做到實時控制.生成每一幀圖像的耗時差不多要2秒左右.
生成的圖像和想像中有些差距,感覺不夠火爆,等我以后有空再調整其參數吧.