All articles| All Pictures| All Softwares| All Video| Go home page| Write articles| Upload pictures

Reading number is top 10 articles
Mars, here I come! Musk recruited Hollywood designer suits,
Robin: have been on an unmanned car, Baidu no VR product releases this year,
谷歌欲降低研发支出,花钱不再大手大脚 - 谷歌,Alphabet
How to save water cell phone? Do not use hair dryer,
马云台湾演讲:这世界观点很多,请学会思考 - 马云
不顾股东利益最大化:澳电两次拒绝汽车之家高价要约 - 汽车之家
腾讯或将入股Bilibili(B站),二次元死磕阿里 - Bilibili,B站,腾讯
Misappropriation of public funds in the Steam House purchase games, US lawmakers ’ tragedies
Millet, two important phone messages with a difficult decision,
女大学生轻信网络游戏中奖:八个月生活费打水漂 - 网络游戏,中奖,诈骗
Reading number is top 10 pictures
Household design comfortable contracted
India's national beauty of the college students
Absolutely shocked. National geographic 50 animal photographys4
The money of more than 100 countries and regions11
Beauty shocked Japan Tokyo motor show model
Players in the eyes of a perfect love1
9.3阅兵全景图8-航空梯队
China's first snake village2
NeedWallpaper9
影评-疯子,我爱你
Download software ranking
C#与.NET技术平台实战演练
Sora aoi‘s film--Lust fan wall
C++编程教程第三版
Macromedia Dreamweaver 8
Visual C++界面编程技术
好色的外科大夫
传奇私服架设教程
Adobe Flash Player(IE) 10.0.32.18 浏览器专用的FLASH插件
超级战舰
双旗镇刀客B
published in(发表于) 2016/3/27 6:23:30 Edit(编辑)
A few lines of code, code monkey second great artist! ,

A few lines of code, code monkey second great artist! ,(几行代码,程序猿秒变大艺术家!,)

English

中文

A few lines of code, code monkey second great artist! -Programmer, programming-IT information

Original title of the three paragraphs within 140 characters of code generation for a 1024x1024 picture, IT information Edit modify, as appropriate.

Kyle McCormick on the StackExchange has launched a competition called the Tweetable Mathematical Art, contestants need to push with three long code to produce a picture. Specifically, participants need to be written in C++ language RD, GR, BL three functions, each function is limited to 140 characters. Each function receives two integers I and j parameters (0 ≤ I, j ≤ 1023), and then returns an integer from 0 to 255, represents a (I, j) color value for the pixel . For example, if RD (0, 0) and GR (0, 0) returns 0, BL (0, 0) returns is 255, so the upper-left pixel of the image is blue. Contestants write code that will be inserted into the following programs (I did some minor changes), will eventually generate a picture of size 1024x1024.

NOTE: compile with g++ filename.cpp -std=c++11

#include <iostream>

#include <cmath>

#include <cstdlib>

#define DIM 1024

#define DM1 (DIM-1)

#define _sq(x) ((x)*(x)) // square

#define _cb(x) abs((x)*(x)*(x)) // absolute value of cube

#define _cr(x) (unsigned char)(pow((x),1.0/3.0)) // cube root

unsigned char GR(int,int);

unsigned char BL(int,int);

unsigned char RD(int i,int j){

YOUR CODE HERE

}

unsigned char GR(int i,int j){

YOUR CODE HERE

}

unsigned char BL(int i,int j){

YOUR CODE HERE

}

void pixel_write(int,int);

FILE *fp;

int main(){

fp = fopen("MathPic.ppm","wb");

fprintf(fp, "P6\n%d %d\n255\n", DIM, DIM);

for(int j=0;j<DIM;j++)

for(int i=0;i<DIM;i++)

pixel_write(i,j);

fclose(fp);

return 0;

}

void pixel_write(int i, int j){

static unsigned char color[3];

color[0] = RD(i,j)&255;

color[1] = GR(i,j)&255;

color[2] = BL(i,j)&255;

fwrite(color, 1, 3, fp);

}

I have selected some of my favorite works and put them in below and share.

First of all is the one from Martin b u ttner works:

Its code is as follows:

unsigned char RD(int i,int j){

return (char)(_sq(cos(atan2(j-512,i-512)/2))*255);

}

unsigned char GR(int i,int j){

return (char)(_sq(cos(atan2(j-512,i-512)/2-2*acos(-1)/3))*255);

}

unsigned char BL(int i,int j){

return (char)(_sq(cos(atan2(j-512,i-512)/2+2*acos(-1)/3))*255);

}

Also works from Martin b u ttner:

This is by far the number one works for the time being. Its code is as follows:

unsigned char RD(int i,int j){

#define r(n)(rand()%n)

static char c[1024][1024];return!c[i][j]?c[i][j]=!r(999)?r(256):RD((i+r(2))%1024,(j+r(2))%1024):c[i][j];

}

unsigned char GR(int i,int j){

static char c[1024][1024];return!c[i][j]?c[i][j]=!r(999)?r(256):GR((i+r(2))%1024,(j+r(2))%1024):c[i][j];

}

unsigned char BL(int i,int j){

static char c[1024][1024];return!c[i][j]?c[i][j]=!r(999)?r(256):BL((i+r(2))%1024,(j+r(2))%1024):c[i][j];

}

This picture below is still from the hand of Martin b u ttner:

It is hard to imagine, Mandelbrot fractal images could only draw with so little code:

unsigned char RD(int i,int j){

float x=0,y=0;int k;for(k=0;k++<256;){float a="x*x-y*y+(i-768.0)/512;y=2*x*y+(j-512.0)/512;x=a;if(x*x+y*y">4)break;} return log(k)*47;

}

unsigned char GR(int i,int j){

float x=0,y=0;int k;for(k=0;k++<256;){float a="x*x-y*y+(i-768.0)/512;y=2*x*y+(j-512.0)/512;x=a;if(x*x+y*y">4)break;} return log(k)*47;

}

unsigned char BL(int i,int j){

float x=0,y=0;int k;for(k=0;k++<256;){float a="x*x-y*y+(i-768.0)/512;y=2*x*y+(j-512.0)/512;x=a;if(x*x+y*y">4)break;} return 128-log(k)*23;

}

Manuel Kasten also produced a picture of the Mandelbrot set, and is just different, which is characterised by somewhere local amplification results of the Mandelbrot set:

Its code is as follows:

unsigned char RD(int i,int j){

double a=0,b=0,c,d,n=0;

while((c=a*a)+(d=b*b)<4&&n++<880)

{b=2*a*b+j*8e-9-.645411;a=c-d+i*8e-9+.356888;}

return 255*pow((n-80)/800,3.);

}

unsigned char GR(int i,int j){

double a=0,b=0,c,d,n=0;

while((c=a*a)+(d=b*b)<4&&n++<880)

{b=2*a*b+j*8e-9-.645411;a=c-d+i*8e-9+.356888;}

return 255*pow((n-80)/800,.7);

}

unsigned char BL(int i,int j){

double a=0,b=0,c,d,n=0;

while((c=a*a)+(d=b*b)<4&&n++<880)

{b=2*a*b+j*8e-9-.645411;a=c-d+i*8e-9+.356888;}

return 255*pow((n-80)/800,.5);

}

This is another work of Manuel Kasten:

Generate code that this picture is very interesting: functions rely on static variables to control the process of painting, there is no use I and j parameters!

unsigned char RD(int i,int j){

static double k;k+=rand()/1./RAND_MAX;int l=k;l%=512;return l>255?511-l:l;

}

unsigned char GR(int i,int j){

static double k;k+=rand()/1./RAND_MAX;int l=k;l%=512;return l>255?511-l:l;

}

unsigned char BL(int i,int j){

static double k;k+=rand()/1./RAND_MAX;int l=k;l%=512;return l>255?511-l:l;

}

This is from the githubphagocyte works:

Its code is as follows:

unsigned char RD(int i,int j){

float s=3./(j+99);

float y=(j+sin((i*i+_sq(j-700)*5)/100./DIM)*35)*s;

return (int((i+DIM)*s+y)%2+int((DIM*2-i)*s+y)%2)*127;

}

unsigned char GR(int i,int j){

float s=3./(j+99);

float y=(j+sin((i*i+_sq(j-700)*5)/100./DIM)*35)*s;

return (int(5*((i+DIM)*s+y))%2+int(5*((DIM*2-i)*s+y))%2)*127;

}

unsigned char BL(int i,int j){

float s=3./(j+99);

float y=(j+sin((i*i+_sq(j-700)*5)/100./DIM)*35)*s;

return (int(29*((i+DIM)*s+y))%2+int(29*((DIM*2-i)*s+y))%2)*127;

}

This is another piece from the githubphagocyte:

This is a picture of the diffusion-limited aggregation model, the program takes a lot of time to run. Code is very interesting: clever use of macro definitions, breaking the boundaries between functions and function, c code combined with the word limit will be used.

unsigned char RD(int i,int j){

#define D DIM

#define M m[(x+D+(d==0)-(d==2))%D][(y+D+(d==1)-(d==3))%D]

#define R rand()%D

#define B m[x][y]

return(i+j)?256-(BL(i,j))/2:0;

}

unsigned char GR(int i,int j){

#define A static int m[D][D],e,x,y,d,c[4],f,n;if(i+j<1){for(d=D*D;d;d--){m[d%D][d/D]=d%6?0:rand()%2000?1:255;} for(n=1

return RD(i,j);

}

unsigned char BL(int i,int j){

A;n;n++){x=R;y=R;if(B==1){f=1;for(d=0;d<4;d++){c[d]=M;f=f2){B=f-1;} else{++e%=4;d=e;if(!c[e]){B=0; M=1;}}}}} return m[i][j];

}

This last picture is from Eric Tressler:

This is the Feigenbaum obtained by logistic map bifurcation diagram. And as before, corresponding code also skillfully uses the macro definitions to save characters:

unsigned char RD(int i,int j){

#define A float a=0,b,k,r,x

#define B int e,o

#define C(x) x>255?255:x

#define R return

#define D DIM

R BL(i,j)*(D-i)/D;

}

unsigned char GR(int i,int j){

#define E DM1

#define F static float

#define G for(

#define H r=a*1.6/D+2.4;x=1.0001*b/D

R BL(i,j)*(D-j/2)/D;

}

unsigned char BL(int i,int j){

F c[D][D];if(i+j<1){A; B; G;a<D;a+=0.1){G b=0;b<D;b++){H; G k=0;kD/2){e=a;o=(E*x);c[e][o]+=0.01;}}}}} R C(c[j][i])*i/D;

}


几行代码,程序猿秒变大艺术家! - 程序员,编程 - IT资讯

原标题《用三段 140 字符以内的代码生成一张 1024×1024 的图片》,IT资讯编辑酌情修改。

Kyle McCormick在StackExchange上发起了一个叫做 Tweetable Mathematical Art 的比赛,参赛者需要用三条推这么长的代码来生成一张图片。具体地说,参赛者需要用C++语言编写RD、GR、BL三个函数,每个函数都不能超过140个字符。每个函数都会接到i和j两个整型参数(0≤i, j≤1023),然后需要返回一个0到255之间的整数,表示位于(i, j)的像素点的颜色值。举个例子,如果RD(0, 0)和GR(0, 0)返回的都是0,但BL(0, 0)返回的是255,那么图像的最左上角那个像素就是蓝色。参赛者编写的代码会被插进下面这段程序当中(我做了一些细微的改动),最终会生成一个大小为1024×1024的图片。

// NOTE: compile with g++ filename.cpp -std=c++11

#include <iostream>

#include <cmath>

#include <cstdlib>

#define DIM 1024

#define DM1 (DIM-1)

#define _sq(x) ((x)*(x)) // square

#define _cb(x) abs((x)*(x)*(x)) // absolute value of cube

#define _cr(x) (unsigned char)(pow((x),1.0/3.0)) // cube root

unsigned char GR(int,int);

unsigned char BL(int,int);

unsigned char RD(int i,int j){

// YOUR CODE HERE

}

unsigned char GR(int i,int j){

// YOUR CODE HERE

}

unsigned char BL(int i,int j){

// YOUR CODE HERE

}

void pixel_write(int,int);

FILE *fp;

int main(){

fp = fopen("MathPic.ppm","wb");

fprintf(fp, "P6\n%d %d\n255\n", DIM, DIM);

for(int j=0;j<DIM;j++)

for(int i=0;i<DIM;i++)

pixel_write(i,j);

fclose(fp);

return 0;

}

void pixel_write(int i, int j){

static unsigned char color[3];

color[0] = RD(i,j)&255;

color[1] = GR(i,j)&255;

color[2] = BL(i,j)&255;

fwrite(color, 1, 3, fp);

}

我选了一些自己比较喜欢的作品,放在下面和大家分享。

首先是一个来自Martin Büttner的作品:

它的代码如下:

unsigned char RD(int i,int j){

return (char)(_sq(cos(atan2(j-512,i-512)/2))*255);

}

unsigned char GR(int i,int j){

return (char)(_sq(cos(atan2(j-512,i-512)/2-2*acos(-1)/3))*255);

}

unsigned char BL(int i,int j){

return (char)(_sq(cos(atan2(j-512,i-512)/2+2*acos(-1)/3))*255);

}

同样是来自Martin Büttner的作品:

这是目前暂时排名第一的作品。它的代码如下:

unsigned char RD(int i,int j){

#define r(n)(rand()%n)

static char c[1024][1024];return!c[i][j]?c[i][j]=!r(999)?r(256):RD((i+r(2))%1024,(j+r(2))%1024):c[i][j];

}

unsigned char GR(int i,int j){

static char c[1024][1024];return!c[i][j]?c[i][j]=!r(999)?r(256):GR((i+r(2))%1024,(j+r(2))%1024):c[i][j];

}

unsigned char BL(int i,int j){

static char c[1024][1024];return!c[i][j]?c[i][j]=!r(999)?r(256):BL((i+r(2))%1024,(j+r(2))%1024):c[i][j];

}

下面这张图片仍然出自Martin Büttner之手:

难以想象,Mandelbrot分形图形居然可以只用这么一点代码画出:

unsigned char RD(int i,int j){

float x=0,y=0;int k;for(k=0;k++<256;){float a="x*x-y*y+(i-768.0)/512;y=2*x*y+(j-512.0)/512;x=a;if(x*x+y*y">4)break;}return log(k)*47;

}

unsigned char GR(int i,int j){

float x=0,y=0;int k;for(k=0;k++<256;){float a="x*x-y*y+(i-768.0)/512;y=2*x*y+(j-512.0)/512;x=a;if(x*x+y*y">4)break;}return log(k)*47;

}

unsigned char BL(int i,int j){

float x=0,y=0;int k;for(k=0;k++<256;){float a="x*x-y*y+(i-768.0)/512;y=2*x*y+(j-512.0)/512;x=a;if(x*x+y*y">4)break;}return 128-log(k)*23;

}

Manuel Kasten也制作了一个Mandelbrot集的图片,与刚才不同的是,该图描绘的是Mandelbrot集在某处局部放大后的结果:

它的代码如下:

unsigned char RD(int i,int j){

double a=0,b=0,c,d,n=0;

while((c=a*a)+(d=b*b)<4&&n++<880)

{b=2*a*b+j*8e-9-.645411;a=c-d+i*8e-9+.356888;}

return 255*pow((n-80)/800,3.);

}

unsigned char GR(int i,int j){

double a=0,b=0,c,d,n=0;

while((c=a*a)+(d=b*b)<4&&n++<880)

{b=2*a*b+j*8e-9-.645411;a=c-d+i*8e-9+.356888;}

return 255*pow((n-80)/800,.7);

}

unsigned char BL(int i,int j){

double a=0,b=0,c,d,n=0;

while((c=a*a)+(d=b*b)<4&&n++<880)

{b=2*a*b+j*8e-9-.645411;a=c-d+i*8e-9+.356888;}

return 255*pow((n-80)/800,.5);

}

这是Manuel Kasten的另一作品:

生成这张图片的代码很有意思:函数依靠static变量来控制绘画的进程,完全没有用到i和j这两个参数!

unsigned char RD(int i,int j){

static double k;k+=rand()/1./RAND_MAX;int l=k;l%=512;return l>255?511-l:l;

}

unsigned char GR(int i,int j){

static double k;k+=rand()/1./RAND_MAX;int l=k;l%=512;return l>255?511-l:l;

}

unsigned char BL(int i,int j){

static double k;k+=rand()/1./RAND_MAX;int l=k;l%=512;return l>255?511-l:l;

}

这是来自githubphagocyte的作品:

它的代码如下:

unsigned char RD(int i,int j){

float s=3./(j+99);

float y=(j+sin((i*i+_sq(j-700)*5)/100./DIM)*35)*s;

return (int((i+DIM)*s+y)%2+int((DIM*2-i)*s+y)%2)*127;

}

unsigned char GR(int i,int j){

float s=3./(j+99);

float y=(j+sin((i*i+_sq(j-700)*5)/100./DIM)*35)*s;

return (int(5*((i+DIM)*s+y))%2+int(5*((DIM*2-i)*s+y))%2)*127;

}

unsigned char BL(int i,int j){

float s=3./(j+99);

float y=(j+sin((i*i+_sq(j-700)*5)/100./DIM)*35)*s;

return (int(29*((i+DIM)*s+y))%2+int(29*((DIM*2-i)*s+y))%2)*127;

}

这是来自githubphagocyte的另一个作品:

这是一张使用diffusion-limited aggregation模型得到的图片,程序运行起来要耗费不少时间。代码很有意思:巧妙地利用宏定义,打破了函数与函数之间的界限,三段代码的字数限制便能合在一起使用了。

unsigned char RD(int i,int j){

#define D DIM

#define M m[(x+D+(d==0)-(d==2))%D][(y+D+(d==1)-(d==3))%D]

#define R rand()%D

#define B m[x][y]

return(i+j)?256-(BL(i,j))/2:0;

}

unsigned char GR(int i,int j){

#define A static int m[D][D],e,x,y,d,c[4],f,n;if(i+j<1){for(d=D*D;d;d--){m[d%D][d/D]=d%6?0:rand()%2000?1:255;}for(n=1

return RD(i,j);

}

unsigned char BL(int i,int j){

A;n;n++){x=R;y=R;if(B==1){f=1;for(d=0;d<4;d++){c[d]=M;f=f2){B=f-1;}else{++e%=4;d=e;if(!c[e]){B=0;M=1;}}}}}return m[i][j];

}

最后这张图来自Eric Tressler:

这是由logistic映射得到的Feigenbaum分岔图。和刚才一样,对应的代码也巧妙地利用了宏定义来节省字符:

unsigned char RD(int i,int j){

#define A float a=0,b,k,r,x

#define B int e,o

#define C(x) x>255?255:x

#define R return

#define D DIM

R BL(i,j)*(D-i)/D;

}

unsigned char GR(int i,int j){

#define E DM1

#define F static float

#define G for(

#define H r=a*1.6/D+2.4;x=1.0001*b/D

R BL(i,j)*(D-j/2)/D;

}

unsigned char BL(int i,int j){

F c[D][D];if(i+j<1){A;B;G;a<D;a+=0.1){G b=0;b<D;b++){H;G k=0;kD/2){e=a;o=(E*x);c[e][o]+=0.01;}}}}}R C(c[j][i])*i/D;

}






添加到del.icio.us 添加到新浪ViVi 添加到百度搜藏 添加到POCO网摘 添加到天天网摘365Key 添加到和讯网摘 添加到天极网摘 添加到黑米书签 添加到QQ书签 添加到雅虎收藏 添加到奇客发现 diigo it 添加到饭否 添加到飞豆订阅 添加到抓虾收藏 添加到鲜果订阅 digg it 貼到funP 添加到有道阅读 Live Favorites 添加到Newsvine 打印本页 用Email发送本页 在Facebook上分享


Disclaimer Privacy Policy About us Site Map

If you have any requirements, please contact webmaster。(如果有什么要求,请联系站长)
Copyright ©2011-
uuhomepage.com, Inc. All rights reserved.