上一篇博客介紹了實(shí)現(xiàn)的原理以及自己的使用JS實(shí)現(xiàn)的版本,其實(shí)在一開始自己并不是使用JS使用,而使用MATLAB,最后實(shí)現(xiàn)的效果不是很好(運(yùn)行時間還是相對較長),但是自己還是從中學(xué)到了諸如MATLAB程序優(yōu)化等方面的知識。
一開始使用了Matlab,因?yàn)楦杏XMATLAB比較擅長矩陣運(yùn)行,可能在圖像的操作上有優(yōu)勢,但是用起來后傻眼了,MATLAB可以將多邊形繪制到figure,但是沒有辦法取得繪制出來的圖像的像素信息,這樣子的話我就沒有辦法和原圖像進(jìn)行比較,已確定當(dāng)前的適應(yīng)度值是多少,程序也就沒有辦法再進(jìn)行下去。
當(dāng)時想到的解決辦法就是利用矩陣,自己在矩陣上畫圖,這樣就復(fù)雜了很多: 1. 首先先要要根據(jù)兩個點(diǎn),在矩陣上連接成一條直線(這兒要用到一點(diǎn)圖形學(xué)上的方法); 2. 然后將各條線組合成一個多邊形,并將多邊形圍成的區(qū)域著色(這一步還好,不用在去學(xué)習(xí)圖形學(xué)的知識了(^_^),直接使用imfill函數(shù)就好了); 3. 最后一步,要將各個多邊形圖像層疊起來,形成一個圖像,這里要理解alpha(透明度)的概念,并理解有透明度的圖像在疊加時像素的計算方式(其中f指前景,b指背景,α為alpha值,參見維基百科):

這樣才算基本完成了繪制圖像( ̄o ̄) . z Z,而其他地方的邏輯基本跟JS版本的相同。
代碼地址 github
未完待續(xù)
新聞熱點(diǎn)
疑難解答