首页 > 代码库 > Tweetable Mathematical Art 习作
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 3R 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;}
效果如下:
实际上,代码中放大镜的位置和尺寸都是可调的。取不同位置生成了一系列图片,然后做成一个动画,如下:
Tweetable Mathematical Art 习作
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。