用Processing進行大數(shù)據(jù)可視化_第1頁
用Processing進行大數(shù)據(jù)可視化_第2頁
用Processing進行大數(shù)據(jù)可視化_第3頁
用Processing進行大數(shù)據(jù)可視化_第4頁
用Processing進行大數(shù)據(jù)可視化_第5頁
已閱讀5頁,還剩10頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、用Processing進行數(shù)據(jù)可視化,第1局部:語言和環(huán)境簡介雖然很多開源工程的初衷都是為現(xiàn)有的應(yīng)用程序構(gòu)建替代方案,但是仍有大量的項目彰顯了創(chuàng)新性。Processing就是其中的一個。Processing在2001年誕生于麻省理 工學(xué)院MIR的媒體實驗室,主創(chuàng)者為Ben Fry和Casey Reas,當(dāng)然還有來自Carnegie Mellon、洛杉磯的加利福尼亞大學(xué)以及邁阿密大學(xué)等的奉獻。Processing的最初目標是開發(fā)圖形的sketchbook和環(huán)境,用來形象地教授計算機科學(xué)的根底知識。之后,它逐漸演變成了可用于創(chuàng)立圖形可視化專業(yè)工程的一種環(huán)境。如 今,圍繞它已經(jīng)形成了一個專門的社區(qū),

2、致力于構(gòu)建各種庫以供用這種語言和環(huán)境進行 動畫、可視化、網(wǎng)絡(luò)編程以及很多其他的應(yīng)用。在本文中,您會發(fā)現(xiàn)Processing是一 個很棒的進行數(shù)據(jù)可視化的環(huán)境,具有一個簡單的接口、一個功能強大的語言以及一套豐富的用于數(shù)據(jù)以及應(yīng)用程序?qū)С龅臋C制。Processing運行于GNU/Linux ?以及Mac OS X和Windows?上,并且支持將圖像 導(dǎo)出成各種格式。對于動態(tài)應(yīng)用程序,甚至可以將Processing應(yīng)用程序作為Java?applet導(dǎo)出以用在Web環(huán)境內(nèi)。本文將先介紹Processing IDE,然后再討論Processing語言的第一個層面。之后將 會介紹一些關(guān)鍵的圖形原語,最后那

3、么探討幾個利用這些原語的應(yīng)用程序。Processing的起源Processing最早是一個用于教授計算機編程的簡化編程語言。這些理念起源于MITMedia Lab John Maeda的Design By Numbers工程,目的是通過可視應(yīng)用程序的開 發(fā)來教授編程。雖然它供編程初學(xué)者使用,但該工程也針對藝術(shù)家及可視化設(shè)計者而設(shè)。有關(guān)Processing及衍生產(chǎn)品的更多信息,請參見參考資料。Processing環(huán)境第一步是安裝Processing環(huán)境。去至U P,單擊DownloadProcessing并選擇您的操作系統(tǒng)。請注意,本文中的例子使用的是Processin

4、gV1.2.1。下載了壓縮文件后,用tar xvfz processing-1.2.1.tgz對其進行展開。此外,還需要確保Java技術(shù)已經(jīng)可用。在Ubuntu上,只需鍵入sudo apt-get installopenjdk-6-jdk。安裝完成后,轉(zhuǎn)到之前解壓縮時創(chuàng)立的processing-1.2.1目錄并嘗試鍵入./processing。這應(yīng)該會彈出Processing Development Environment PDE或Processing IDE ,如 圖1所示。占此窗口較大的局部是文本編輯器。如果輸入圖中所示的兩行代碼,然后 單擊Run左上角的三角形,出現(xiàn)一個窗口,顯示您所輸入

5、的簡單程序或Processing術(shù)語所指的sketch的結(jié)果。單擊Stop左上角的方框退出程序,窗口消失。圖1. PDE和Results窗口現(xiàn)在,讓我們先來深入研究Processing語言,探討它的主要特性,并且開發(fā)一些有趣 的應(yīng)用程序?;仨撌譖rocessing語言Processing是用Java編程語言寫的,并且Java語言也是在語言樹中最接近Processing的。所以,如果您熟悉C或Java語言,Processing將很容易學(xué)。并 且在程序如何構(gòu)造方面,也作了一些簡化。Processing并不包括Java語言的一些較為高級的特性,但這些特性中的很多特性均已集成到了Processing

6、,所以您無需了解 它們。之所以選擇Java語言是因為Processing應(yīng)用程序被翻譯成Java代碼執(zhí)行。選擇Java范型簡化了這種翻譯并讓開發(fā)和執(zhí)行可視化程序變得十分簡單和直觀。 假設(shè)要比照Processing語言和Java語言,請參閱參考資料?;仨撌讏D形環(huán)境正如您在 圖1所見,在Processing內(nèi)進行開發(fā)涉及到的是PDE和顯示窗口。2-D圖形的坐標系如圖2所示。size關(guān)鍵字以像素為單位定義了顯示窗口的大小并且通 常都是Processing應(yīng)用程序內(nèi)的首要步驟。圖2. 2-D顯示窗口的坐標A9Texteditor winctowDisplay window如圖2所不size關(guān)鍵字指定顯

7、不窗口的X和Y坐標。line關(guān)鍵字那么會在兩個像素點之間繪制一條線以x1、y1 to x2、y2的格式。請注意,超出屏幕邊界size定義的邊界外畫線并非不允許,只是被忽略了而已。本文無意對此做深入探討,但size接受可選的第三個參數(shù)mode mode用來定義要使用的呈現(xiàn)引擎并支持PDF直接呈現(xiàn)為Adobe? PDF文檔、OPENGL利用一個可用的Open-GL圖形適配器、P3D為了迅速的3-D呈現(xiàn)等。默認的 是JAVA2D它最適合于高質(zhì)量的2-D成像?,F(xiàn)在,我們來看一些根本的圖形原語,然后再深入探討幾個例如應(yīng)用程序?;仨撌讏D形原語Processing包含了大量各種各樣的幾何形狀以及這些形狀的控

8、件。本節(jié)會簡介一些基 本的圖形原語。背景和顏色background功能被用來設(shè)置顯示窗口的顏色。此函數(shù)可以使用各種不同的參數(shù)來定義一個灰度值或Red-Green-Blue RGB顏色。清單1內(nèi)的代碼片段會生成如囹3所示的輸出,其中的cell a 。清單1.使用Background函數(shù)size (100, 100);background ( 0, 128, 0 );繪制像素點可以使用set函數(shù)繪制單個像素點。此函數(shù)接受顯示窗口內(nèi)的x,y坐標以及作為顏色的第三個參數(shù)。Processing也有一個類型,稱為color ,通過它,可以定義用于某個操作的顏色。在本例中,我們創(chuàng)立了一個顏色實例并用它來設(shè)置

9、顯示窗口內(nèi)的某個像 素點參見清單2和圖3中的cell b 。清單2.設(shè)置像素點和顏色size (100, 100);for (int x = 0 ; x 100 ; x+) (for (int y = 0 ; y 100 ; y+) (color c = color ( x*2, y*2, 128 );set (x, y, c);)可以使用get操作來讀取顯示中的一個給定像素點的顏色。雖然set很簡單,但它不是操做顯示的最快方式。要想快速訪問,可以使用pixels數(shù)組(與loadPixels和updatePixels函數(shù)一致)。繪制形狀在Processing內(nèi)使用單個函數(shù)繪制形狀十分簡單。要設(shè)

10、置在繪制形狀時使用何種顏色,可以利用stroke函數(shù)。此函數(shù)可接受一個單獨的灰度參數(shù)或三個RGB參數(shù)。此外,還可以用fill命令定義這個形狀的填充色。清單3顯示了如何繪制線、矩形、圓(使用橢圓)及橢圓。line函數(shù)接受四個參數(shù),代表的是要在其間繪制線條的點。rect函數(shù)可繪制一個矩形,并且前兩個點定義位置,而后面兩個點那么分別定義寬度和高度。ellipse函數(shù)也接受四個參數(shù),分別定義位置和寬/高度。當(dāng)寬和高相等時,就是一個圓形。還可以使用ellipseMode函數(shù)定制橢圓,它指定x,y位置是否代表了橢圓的角(CORNE皿中心(CENTER。參見 圖 支中的cellC。清單3.線和形狀size

11、(100, 100);stroke (0, 128, 0);line (10, 10, 90, 90);fill (20, 50, 150);rect (30, 30, 60, 40);fill (190, 0, 30);ellipse (30, 70, 20, 20);fill (0, 150, 90);ellipse (70, 30, 30, 20);繪制四邊形在Processing內(nèi)使用quad可以很容易地繪制有四個邊的多邊形。四邊形接受八個參數(shù),代表的是這個四邊形的四個頂點。清單4內(nèi)的例如創(chuàng)立了10個隨機的四邊形(其中這些點必須是順時針或逆時針順序。此代碼還會為每個四邊形創(chuàng)立一個隨機的

12、灰度。清單4.繪制四邊形size (100, 100);for (int i = 0 ; i 4 Oil 5ftu|iC) 1112 E SO): f ir !PPIBT fort -tB.wlw1;做是為了防止更改對空間的破壞。此空間然后會成為一個顯示空間被顯示的東西 和一個計算空間規(guī)那么的應(yīng)用。這些空間按每次生成對調(diào)。從很大程度上講,這個應(yīng)用程序使用了極少的Processing圖形關(guān)鍵字。為空間定義的顏色只有幾個:stroke用來更改顏色,point用于繪制像素點。使用Processing模型,draw函數(shù)調(diào)用update以應(yīng)用規(guī)那么;返回后,draw將這個更新了的空間發(fā)到顯示窗口。清單5

13、.元胞自動機森林火災(zāi)模型int pix = new int2400400;int toDraw = 0;int tree = 0;int burningTree = 1;int emptySite = 2;int x_limit = 400;int y_limit = 400;color brown = color(80, 50, 10); / browncolor red =color (255, 0, 0); / red;color green = color(0, 255, 0); / greenfloat pGrowth = 0.01;float pBurn = 0.00006;boo

14、lean prob( float p )if ( random (0, 1) p) return true;else return false;void setup ()size (x_limit, y_limit);frameRate (60);/* Initialize to all empty sites */for (int x = 0 ; x x_limit ; x+) for (int y = 0 ; y y_limit ; y+) pixtoDrawxy = emptySite;)void draw()(update();for (int x = 0 ; x x_limit ;

15、x+) (for (int y = 0 ; y y_limit ; y+) (if (pixtoDrawxy = tree) (stroke ( green );) else if (pixtoDrawxy = burningTree) (stroke ( red );) else stroke ( brown );point ( x, y );)toDraw = (toDraw = 0) ? 1 : 0;)void update()(int x, y, dx, dy, cell, chg, burningTreeCount;int toCompute = (toDraw = 0) ? 1 :

16、 0;for (x = 1 ; x x_limit-1 ; x+) (for (y = 1 ; y y_limit-1 ; y+) (cell = pixtoDrawxy;/ Survey area for burning treesburningTreeCount = 0;for (dx = -1 ; dx 2 ; dx+) (for (dy = -1 ; dy 0) chg = burningTree;else chg = cell;pixtoComputexy = chg;)圖6顯示了這個元胞自動機森林火災(zāi)模型的迭代,跳躍恰當(dāng),很好地顯示了所設(shè)規(guī)那么的效果。Time 0包含的只有樹木在其

17、中生長的空間。在time 40,就可以開始看到大 火在燃燒并最終占據(jù)整個空間。在大約time 100,樹木生長更為明顯,但在time 120時,起火更多,過程循環(huán)。圖6.元胞自動機森林火災(zāi)模型的輸出回頁首易染/感染/免疫模型易染/感染/免疫模型模擬的是疾病在醫(yī)院內(nèi)的蔓延。與森林火災(zāi)模型類似,SIR也是通過一套簡單規(guī)那么實現(xiàn)的,只不過添加了一些復(fù)雜性和有趣的行為。在這個模型內(nèi),有一個由病人占據(jù)的病床組成的網(wǎng)格。在time 0,所有病人都是某一種新疾病的易染人群,這意味著這些病人從未患過這種疾病,因此才有可能被感染。如果在某個病人的東 /南/西/北的四個鄰居中有一個患了這種疾病,那么該病人受感染的

18、可能性為tauo一個受感染的病人的患病時間為K天,在此期間病人有感染其他病人的可能性。在K天后,該病人康復(fù)并有了對這種疾病的免疫力。正如之前的例子所示,setup函數(shù)先初始化這個醫(yī)院以及所有易染病人,只有最中心 的這個病人是已經(jīng)患病的。在該實現(xiàn)內(nèi),0是易染病人,1-K是感染病人,-1是免疫病人。draw函數(shù)將這種幾何分布發(fā)到顯示窗口,update實施這些SIR規(guī)那么。與之前一樣,可以用一個3D數(shù)組保存當(dāng)前的這些幾何分布。清單6給出了此代碼。清單6. Processing內(nèi)的SIR模型int beds = new int2200200;int toDraw = 0;int x_limit = 2

19、00;int y_limit = 200;color brown = color (80, 50, 10); / browncolor red = color (255, 0, 0); / red;color green = color (0, 255, 0); / greenint susceptible = 0;int recovered = -1;float tau = 0.2;int k = 4;boolean prob( float p )if ( random (0, 1) p) return true;else return false;void setup ()size (x_

20、limit, y_limit);frameRate (50);for (int x = 0 ; x x_limit ; x+) for (int y = 0 ; y y_limit ; y+) bedstoDrawxy = susceptible;bedstoDraw100100 = 1;void draw()update();for (int x = 0 ; x x_limit ; x+) for (int y = 0 ; y y_limit ; y+) (if (bedstoDrawxy = recovered)stroke ( brown );else if (bedstoDrawxy = susceptible)stroke ( green );else if (bedstoDrawxy 0) & (patient k) return true;return false;)void update

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論