崑山科技大學資訊傳播系 互動藝術與裝置應用第 1 次分組作品企劃書 作品名稱 組員 設計理念 神機妙算 * 命運查詢系統 4970C001 陳亞琳 4970C003 黃藝君 4970C011 陳德蓉 中國人有個迷信的習慣, 每當人生中遇到迷惘的事, 或者無法做出 重大的決定時, 常常會求神拜佛, 或者是找算命師解決疑問, 但這些求神問卜的方法一直沒有得到科學的根據, 而信仰宗教的人們會依賴寺廟裡的籤筒來做決定, 本團隊將籤筒數位化, 做出利用電腦也可以算命的籤筒. 設計方法先繪畫出命運查詢系統背景圖, 再利用 Processing 程式撰寫程式碼, 製作道具後透過視訊裝置感應至程式, 藉由辨認色彩的值, 做出判斷命運卡的動作 作品展示 開啟命運查詢系統, 畫面就進入到 命運查詢系統的首頁, 方框中為視 訊畫面, 下方為歡迎字句
我們準備了三種籤卡, 分別為財運 學業及健康, 將想要抽籤的籤卡擺放至視訊感 應區, 就會產生出亂數顯示籤詩 ( 因為截圖關係所以圖片顯示不出亂數部分 ) 將財運籤卡放置 視訊鏡頭中 將學業籤卡放 置視訊鏡頭中 將健康籤卡放 置視訊鏡頭中 將籤卡拿離感應區即顯示出抽籤結果 程式碼 import processing.video.*; Capture video; int hand[][]; int hn=10000,hp; int rednum,bluenum,greennum,blockthreshold;// int cw,ch; //camera weight & height int destiny; PImage p,s; void setup()
size(370,434); cw=325; ch=245; video = new Capture(this,cw, ch, 30); nostroke(); smooth(); s = loadimage("s.jpg"); background(s); hand=new int[hn][2]; hp=0; blockthreshold=50;// 畫面上顏色點的總數有超過門檻值個數表示有擲出 void draw() float brightestvalue = 200;// 新增的變數, 將紅色另開變數抓取 float brightestvalue2 = 200;// 新增的變數, 將藍色另開變數抓取 float brightestvalue3 = 100;// 新增的變數, 將綠色另開變數抓取 float pixelbrightness; int pixelvalue; if (video.available()) video.read(); image(video, 24, 23, cw, ch); // 計算藍點的數量 rednum=0; bluenum=0; greennum=0; video.loadpixels(); int index = 0; for (int y = 0; y < video.height; y++) for (int x = 0; x < video.width; x++) pixelvalue = video.pixels[index]; pixelbrightness = red(pixelvalue)*2-(green(pixelvalue)+blue(pixelvalue)); if (pixelbrightness > brightestvalue) rednum++; // 有紅色點 pixelbrightness = blue(pixelvalue)*2-(red(pixelvalue)+green(pixelvalue)); if (pixelbrightness > brightestvalue2) bluenum++; // 有藍色點 pixelbrightness = green(pixelvalue)*2-(red(pixelvalue)+blue(pixelvalue)); if (pixelbrightness > brightestvalue3) greennum++; // 有綠色點 index++;
if(rednum>0 bluenum>0 greennum>0) println("red: "+rednum+" "+bluenum+" Green: "+greennum); // 判斷杯筊擲出的結果 if(rednum>blockthreshold) // 判別是紅色的話 float r = random(-1, 15); destiny = int(r); switch(destiny) case 0: p = loadimage("r00.jpg"); case 1: p = loadimage("r01.jpg"); case 2: p = loadimage("r02.jpg"); case 3: p = loadimage("r03.jpg"); case 4: p = loadimage("r04.jpg"); case 5: p = loadimage("r05.jpg"); Blue:
case 6: p = loadimage("r06.jpg"); case 7: p = loadimage("r07.jpg"); case 8: p = loadimage("r08.jpg"); case 9: p = loadimage("r09.jpg"); case 10: p = loadimage("r10.jpg"); case 11: p = loadimage("r11.jpg"); case 12: p = loadimage("r12.jpg"); case 13: p = loadimage("r13.jpg"); case 14:
p = loadimage("r14.jpg"); if(bluenum>blockthreshold) // 判別是藍色的話 float r = random(-1, 15); destiny = int(r); switch(destiny) case 0: p = loadimage("b00.jpg"); case 1: p = loadimage("b01.jpg"); case 2: p = loadimage("b02.jpg"); case 3: p = loadimage("b03.jpg"); case 4: p = loadimage("b04.jpg"); case 5: p = loadimage("b05.jpg"); case 6:
p = loadimage("b06.jpg"); case 7: p = loadimage("b07.jpg"); case 8: p = loadimage("b08.jpg"); case 9: p = loadimage("b09.jpg"); case 10: p = loadimage("b10.jpg"); case 11: p = loadimage("b11.jpg"); case 12: p = loadimage("b12.jpg"); case 13: p = loadimage("b13.jpg"); case 14: p = loadimage("b14.jpg");
if(greennum>blockthreshold) // 判別是藍色的話 float r = random(-1, 15); destiny = int(r); switch(destiny) case 0: p = loadimage("g00.jpg"); case 1: p = loadimage("g01.jpg"); case 2: p = loadimage("g02.jpg"); case 3: p = loadimage("g03.jpg"); case 4: p = loadimage("g04.jpg"); case 5: p = loadimage("g05.jpg"); case 6:
p = loadimage("g06.jpg"); case 7: p = loadimage("g07.jpg"); case 8: p = loadimage("g08.jpg"); case 9: p = loadimage("g09.jpg"); case 10: p = loadimage("g10.jpg"); case 11: p = loadimage("g11.jpg"); case 12: p = loadimage("g12.jpg"); case 13: p = loadimage("g13.jpg"); case 14: p = loadimage("g14.jpg");