創作者: 曹訓誌 TSAO Hsun-Chih
穩定的世界,流動的內函,理智的機械,竄流的運算。以有限的運算符碼,創造無限的想像空間。
有一隻筆,我們可以描繪自然,有雕刻刀,我們可以雕塑形象,有了顏料,可以繽紛世界,如今有了電腦,我們可以做些什麼?
追求美的事物,是人的天性,我們用雙手模仿、創造出天地間的美,這樣的藝術活動持續了千年,在這當中,科技也逐漸地、緩慢地改變了藝術的表現媒材與形式,而電腦的誕生又帶給人們一個全新的工具,全新的思維。當類比思維的人腦,遇上邏輯運算電腦,會發生什麼事情? 透過這個具有運算能力以及表現能力的工具,這種互補的組合,是否可以帶給我們全新的視覺體驗呢?
透過DBN,我們可以以簡單的指令,創造出形狀與色彩,也可以發揮創意,組合基本指令,開拓出意想不到的視覺效果,再藉由隨機亂數,進一步展現出更為深邃的藝術內涵。
DBN CODE Preparation: 在使用本作品程式碼之前,請先至下列網站將整段程式碼複製到您的DBN編輯視窗中,取名math(new01).dbn,存放在DBN程式的根目錄裏,作為擴增程式庫,後面的程式需要用到三角函數,但是DBN沒有提供。
http://artstream.ucsc.edu/film170a/Winter2003/logo_commands.dbn
作品說明:
使用電腦作為繪圖工具,對人類而言是一個全新思維,而直接用code創作,更是一個很大的挑戰。有別於過去藉由手眼協調的創作形式,coding本身是絕對抽象的,是二階段的藝術創作,有點像是樂譜與樂曲間的關係,必須經過轉譯與再呈現才是一個完整的作品。
既然個工具與其他工具有著先天上的差異,自然也需要不同的思維來使用。Coding本身的原則很簡單,就是「以簡馭繁」。從這個點出發,我們可以借用先人的智慧,看看是否能創造出不同型態的視覺,接下來的作品引進了幾個簡單的方程式: 拋體運動、三角函數。
系列一: 拋體運動。
這個系列的作品是從簡單的拋體運動開始發想,再加上設計的幾個間單規則,如對稱、置換、秩序等手法。除此之外也善用了DBN本身只能計算整數,無法計算實數的先天特質,以及畫圓時半徑正負值所帶來的變化,所帶來的視覺效果。
[SOURCE CODE]
//
// setting and initialization
//
load dbngraphics.dbn
load math(new01).dbn
size 400 400
fast
//
//———a01—————————–
command tda01
{
paper 90
//——int data———
set x0 0
set y0 400
set x1 0
set y1 400
set dy0 0
set dy1 1
set dx 1
set g 1
repeat t 1 400
{
smaller? y1 0
{
set dx0 dx
set dx (dx0+1)
set dy1 0
set y1 400
set x1 0
}
set y0 y1
set dy0 dy1
set dy1 (dy0+g)
set y1 (y0-dy0)
set x0 x1
set x1 (x0+dx-1)
set r01 ((dx+dy1)/2)
set [ (200+x1) y1 ] 10
set [ (200-x1) y1 ] 10
set k ((x1*y1)%100)
notsmaller? k 50 ; {; set k (100-k);};
circle (200+x1) y1 (
circle (200-x1) y1 (
//paper 20
}
}
//———a02—————————–
command tda02
{
set x0 0
set y0 400
set x1 0
set y1 400
set dy0 0
set dy1 1
set dx 1
set g 1
repeat t 1 380
{
smaller? y1 0
{
set dx0 dx
set dx (dx0+1)
set dy1 0
set y1 400
set x1 0
}
set y0 y1
set dy0 dy1
set dy1 (dy0+g)
set y1 (y0-dy0)
set x0 x1
set x1 (x0+dx-1)
set r01 ((dx+dy1)/2)
set [ (200+x1) y1 ] 10
set [ (200-x1) y1 ] 10
set k ((x1*y1)%100)
notsmaller? k 50 ; {; set k (100-k);};
circle (200+x1) y1 ((
circle (200-x1) y1 ((
//paper 20
}
}
//—————————————–
forever
{
tda01
tda02
pause 1000
}
系列二: 三角函數。
三角函數在此的功能不是計算複雜的空間關係,而是借用他週而復始的特性。了解工具的能耐是設計師的工作,DBN本身不是個高效能的工具,不能也不該讓他做太複雜的計算。藉由三角函數週而復始的特性,應用在空間位移與RGB三原色的變化,最後我再利用後繪蓋前繪的手法,以及DBN只能計算整數的特性,創造出融合的光影變化。這個系列的作品因需填滿所有空間,繪製時間較長,請耐心等候。
[SOURCE CODE]
//
// setting and initialization
//
load dbngraphics.dbn
load math(new01).dbn
size 400 400
fast
//———b01—————————–
command tdb01
{
paper 70
repeat x 1 80
{
repeat t 1 400
{
set r ((
set g ((
set b
set s
//set i ((r+b+80+(x*4))%100)
//set j ((g+40+(x*2))%100)
//set k (b+s)
pen ((r+b+80+(x*4))%100) ((g+40+(x*2))%100) (b+s)
//line t (b+g+400-(x*20)) t (r+b-(x*20))
line t (b+g+400-(x*10)) t (b+g+380-(x*10))
}
}
}
//———b02—————————–
command tdb02
{
paper 70
repeat x 1 160
{
repeat t 1 400
{
set r ((
set g ((
set b
set s
set i ((r+b+80+(x*4))%100)
set j ((g+40+(x*2))%100)
set k (b+s)
smaller? i 50 ; {; set i (100-i);};
smaller? j 50 ; {; set j (100-j);};
notsmaller? k 50 ; {; set k (100-i);};
pen i j k
//line t (b+g+400-(x*20)) t (r+b-(x*20))
line t (b+g+400-(x*5)) t (b+g+380-(x*5))
}
}
}
//—————————————–
forever
{
tdb01
pause 2000
tdb02
pause 2000
}
[Img]::tbb01
![]()
[Img]::tbb02
![]()
系列三: 交錯畫圓。
這個系列的手法很簡單,就是畫圓。一般來講用程式畫圓很簡單,若要用8個點劃一個圓,只要以圓心為中心,在半徑R的距離上,每轉動360/8度畫一點則可。本系列原則上也是如此,只不過稍稍改變一下規則,每次旋轉的角度超過180度,如此雖然一樣可以用8點完成一個圓,不過過程不同,從照順序的畫法變成跳躍的畫法。有了這個手法,再用直線將每個點連接起來,進而使用三角函數產生RGB變化,就可以創造出類似織布的效果。完成這個效果後再試著改變圓心的位置,可以創造出各式各樣的圖形。
[SOURCE CODE]
//
// setting and initialization
//
//
load dbngraphics.dbn
load math(new01).dbn
size 400 400
fast
//———c02—————————–
command tdc02
{
paper 70
set a0 0
set b0 0
set a1 0
set b1 0
set a2 0
set b2 0
command cir02 x y rad rot
{
repeat t 1 8
{
set ang (1000-(1000*10/16))
set a0 a1
set b0 b1
set a1 a2
set b1 b2
set a2 (
set b2 (
//set [(a+x) (b+y) red] 50 //((
//set [(a+x) (b+y) green] 50 //((
//set [(a+x) (b+y) blue] ((a+b)%30)
pen (10+(t*10))
triangle (a0+x) (b0+y) (a1+x) (b1+y) (a2+x) (b2+y)
}
//cir01 x y (rad+2) (rot+30)
//cir01 x y (rad+2) (rot+60)
refresh
}
repeat z 1 120
{
cir02 200 200 (10+(z*5)) (60*z)
//cir02 100 100 (10+(z*3)) (31*z)
}
}
//———c03—————————–
command tdc03
{
paper 70
set a0 0
set b0 0
set a1 0
set b1 0
set a2 0
set b2 0
command cir03 x y rad rot
{
repeat t 1 8
{
set ang (1000-(1000*10/16))
set a0 a1
set b0 b1
set a1 a2
set b1 b2
set a2 (
set b2 (
set r
set g
//…dot circle………………
//set [(a+x) (b+y) red] 50 //((
//set [(a+x) (b+y) green] 50 //((
//set [(a+x) (b+y) blue] ((a+b)%30)
//… rotated triangle………..
//pen (10+(t*7))
//triangle (a0+x) (b0+y) (a1+x) (b1+y) (a2+x) (b2+y)
//… color rotated triangle…..
pen ((g*t+t*157)%100) ((r*t+(1*147))%100) (((r+g)*t)%100)
line (a0+x) (b0+y) (a1+x) (b1+y)
line (a1+x) (b1+y) (a2+x) (b2+y)
line (a2+x) (b2+y) (a0+x) (b0+y)
}
}
repeat z 1 400
{
cir03 200 200 (20+(z*2)) (10*z)
//cir03 200 200 (10+(z*3)) (12*z)
}
}
//———c06—————————–
command tdc06
{
paper 90
set a0 0
set b0 0
set a1 0
set b1 0
set a2 0
set b2 0
command cir06 x y rad rot
{
repeat t 1 8
{
set ang (1000-(1000*10/13))
set a0 a1
set b0 b1
set a1 a2
set b1 b2
set a2 (
set b2 (
set r
set g
//…dot circle………………
//set [(a+x) (b+y) red] 50 //((
//set [(a+x) (b+y) green] 50 //((
//set [(a+x) (b+y) blue] ((a+b)%30)
//… rotated triangle………..
//pen (10+(t*7))
//triangle (a0+x) (b0+y) (a1+x) (b1+y) (a2+x) (b2+y)
//… color rotated triangle…..
pen ((g+(t*131))%100) ((r+(t*47))%100) ((r+g+(t*69))%100)
line (a0+x) (b0+y) (a1+x) (b1+y)
line (a1+x) (b1+y) (a2+x) (b2+y)
line (a2+x) (b2+y) (a0+x) (b0+y)
}
}
repeat z 1 200
{
cir06 0 0 (20+(z*3)) (10*z)
//cir06 200 200 (10+(z*3)) (10*z)
}
}
//———c07—————————–
command tdc07
{
paper 0
set a0 0
set b0 0
set a1 0
set b1 0
set a2 0
set b2 0
command cir07 x y rad rot
{
repeat t 1 8
{
set ang (1000-(1000*10/16))
set a0 a1
set b0 b1
set a1 a2
set b1 b2
set a2 (
set b2 (
set r
set g
//…dot circle………………
//set [(a+x) (b+y) red] 50 //((
//set [(a+x) (b+y) green] 50 //((
//set [(a+x) (b+y) blue] ((a+b)%30)
//… rotated triangle………..
//pen (10+(t*7))
//triangle (a0+x) (b0+y) (a1+x) (b1+y) (a2+x) (b2+y)
//… color rotated triangle…..
pen ((g+(t*131))%100) ((r+(t*47))%100) ((r+g+(t*69))%100)
line (a0+x) (b0+y) (a1+x) (b1+y)
line (a1+x) (b1+y) (a2+x) (b2+y)
line (a2+x) (b2+y) (a0+x) (b0+y)
refresh
}
}
repeat z 1 400
{
set z1 (
set z2 (
cir07 ((z1+z2)/2+200) z (20+(1*2)) (10*z)
//cir07 200 200 (20+(z*2)) (10*z)
//cir07 200 200 (10+(z*3)) (12*z)
}
}
//—————————————–
forever
{
tdc02
pause 200
tdc03
pause 200
tdc06
pause 200
tdc07
pause 1000
}
[Img]::tbc02
![]()
[Img]::tbc03
![]()
[Img]::tbc06
![]()
[Img]::tbc07
![]()
You must be logged in to post a comment.
吳文成 17October2007
太厲害了
曹訓誌 9January2008
您過講了,你才是個中高手!!