您的位置:首页 > 其它

精彩作图

2015-11-25 14:32 239 查看
原文: 有没有一段代码,让你觉得人类的智慧也可以璀璨无比?

原文是C++代码,且产生的图形是PPM格式,下面程序是C语言版本的,输出为BMP格式的图片。

#include <stdio.h>

#include <math.h>

#include <stdlib.h>

#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

}

FILE *fp;

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);

}

int main()

{

char bmphead[] = {0X42 ,0X4D ,0X36 ,0X00 ,0X30 ,0X00 ,0X00 ,0X00 ,0X00 ,0X00 ,0X36 ,0X00 ,0X00 ,0X00 ,

0X28 ,0X00 ,0X00 ,0X00 ,0X00 ,0X04 ,0X00 ,0X00 ,0X00 ,0X04 ,0X00 ,0X00 ,0X01 ,0X00 ,

0X18 ,0X00 ,0X00 ,0X00 ,0X00 ,0X00 ,0X00 ,0X00 ,0X30 ,0X00 ,0X00 ,0X00 ,0X00 ,0X00 ,

0X00 ,0X00 ,0X00 ,0X00 ,0X00 ,0X00 ,0X00 ,0X00 ,0X00 ,0X00 ,0X00 ,0X00} ;

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

fwrite(bmphead, 1, 54, fp);

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

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

pixel_write(i,j);

fclose(fp);

return 0;

}

更多精彩参见
出处

示例

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);

}



----------------------------------------------------------------------------------------------------------------------------

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;

}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: