Why數(shù)學(xué)圖像生成器能夠以給定的數(shù)學(xué)公式及算法生成各種絢爛的數(shù)學(xué)圖像.這是一款與圖像有關(guān)的軟件,所以圖像加載顯示功能是必需的,軟件支持的圖像格式有:png,jpg,dds,bmp,tga,ppm。用戶可以將文件直接拖入窗體內(nèi)以打開圖像,也可以通過菜單項(xiàng)或快捷方式Ctrl+F選擇文件加載。
兩種生成圖像的方法:
(1)通過一種我自定義的腳本語言生成:
軟件中定義一套簡單易學(xué)的腳本語言,用于描述數(shù)學(xué)表達(dá)式.使用時(shí)需要先要將數(shù)學(xué)表達(dá)式寫成該腳本的形式,解析腳本代碼以生成相應(yīng)的圖像.
(2)使用軟件中內(nèi)置的算法:
軟件中含有近百種數(shù)學(xué)圖像生成的算法,如Mandelbrot,JuliaSets之類的分形算法。
軟件的開發(fā)語言是C++,開發(fā)環(huán)境是VS2008,渲染使用的是D3D9。
基本功能:
下圖為軟件界面:
在窗體的兩邊有UI界面,用戶可以按快捷鍵U來開關(guān)UI界面。
(1.1)圖像顏色通道
先看下左則的UI,打開圖像后,可以通過UI選擇RGBA的各個(gè)通道以顯示圖像,或通過快捷鍵R,G,B,A,I來選擇通道模式:
R通道圖像:
G通道圖像:
B通道圖像:
反色圖像:
(1.2)圖像濾波方式
有兩種圖像濾波方式:(1)線性采樣(2)點(diǎn)采樣。通過下圖可以看出二者的區(qū)別:
(1.3)圖像大小設(shè)置:
鼠標(biāo)滾輪用于控制圖像的縮放。圖像縮放時(shí),是以鼠標(biāo)所指的位置當(dāng)做中心進(jìn)行縮放的。
鼠標(biāo)右鍵拖動(dòng)可以控制圖像的位置。
如下圖為縮小并拖動(dòng)后的圖像:
還有兩個(gè)按鈕,其快捷鍵為F,O。分別表示使圖像最合適的大小顯示,和使圖像以原始大小顯示。
最后鍵盤F11用于控制界面的全屏切換。
通過腳本生成圖像
之前我寫過一套數(shù)學(xué)圖形可視化的工具,可以將數(shù)學(xué)表達(dá)式以圖形的形式顯示出來.這兩套軟件使用的腳本解析方式是一樣的,即兩個(gè)軟件使用相同的腳本解析模塊.關(guān)于詳細(xì)語法介紹請看:數(shù)學(xué)圖形可視化工具的腳本語法.我已經(jīng)將該腳本解析模塊的代碼開源.這里腳本的后綴名為txt,主要是方便用記事本打開.目前我寫了幾十個(gè)腳本,放置在"Why數(shù)學(xué)圖像生成工具_(dá)1_0\Scripts"目錄下.腳本文件的加載方式與圖像加載一樣,即可以通過菜單項(xiàng)選擇文件打開,又可以直接將文件拖入程序窗體內(nèi)自動(dòng)加載.
腳本編輯
按下鍵盤F5或通過菜單選項(xiàng)可以打開腳本編輯對話框:
數(shù)學(xué)圖像生成算法
不得不承認(rèn)我的腳本功能還不夠強(qiáng)大,只能實(shí)現(xiàn)些比較基礎(chǔ)的圖像,像循環(huán)迭代這樣的算法目前還沒辦法實(shí)現(xiàn).為了彌補(bǔ)這一不足,我將一些數(shù)學(xué)圖像生成算法內(nèi)置到該軟件中.
(3.1)Tweetable Mathematical Art
網(wǎng)上有很多通過算法生成數(shù)學(xué)圖像,尤其是與分形學(xué)相關(guān)的方面.我收集了近百種數(shù)學(xué)圖像生成的算法,都寫入該軟件中.其中大部份算法來自:http://codegolf.stackexchange.com/questions/35569/tweetable-mathematical-art.它是Kyle McCormick 在 StackExchange 上發(fā)起了一個(gè)叫做 Tweetable Mathematical Art 的比賽,參賽者需要用三條代碼來生成一張圖片。具體地說,參賽者需要用 C++ 語言編寫 RD 、 GR 、 BL 三個(gè)函數(shù),每個(gè)函數(shù)都不能超過 140 個(gè)字符。每個(gè)函數(shù)都會(huì)接到 i 和 j 兩個(gè)整型參數(shù)(0 ≤ i, j ≤ 1023),然后需要返回一個(gè) 0 到 255 之間的整數(shù),表示位于 (i, j) 的像素點(diǎn)的顏色值。參賽者編寫的代碼會(huì)被插進(jìn)下面這段程序當(dāng)中,最終會(huì)生成一個(gè)大小為 1024×1024 的圖片。