Tweetable Mathematical Art 習作


Matrix67 blog里面看到了Tweetable Mathematical Art比賽,感覺挺有意思。

這個比賽的方法很簡單,實現3個函數RD(i, j), GR(i, j), BL(i, j)分別返回像素(i, j)的R/G/B值,最終生成1幅1024*1024的圖片,看誰的圖片被贊最多。要求是每個函數代碼不超過140字符,即Tweetable。

手癢寫了一個:放大鏡效果,簡單的Ray Tracing。代碼如下:

unsigned short RD(int i,int j){
#define F(x) float x
#define R return
#define Ci (DIM/2)
#define Cj Ci
#define Z (Ci/2)
#define G (Ci/8)
#define N 3
R BL(i,j);
}

unsigned short GR(int i,int j){
#define Y(x) sqrt(1.-_sq(x))
R BL(i,j);
}

unsigned short BL(int i,int j){
F(r)=sqrt(0.+_sq(i-Ci)+_sq(j-Cj));F(s)=r/Z;if(s<1){i-=Ci;j-=Cj;F(k)=(Y(s)*Y(s/N)+_sq(s)/N)*N;i=i/k+Ci;j=j/k+Cj;}R (i/G+j/G)%2*255;
}

效果如下:

 

實際上,代碼中放大鏡的位置和尺寸都是可調的。取不同位置生成了一系列圖片,然后做成一個動畫,如下:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM