精彩作图

来源:互联网 发布:cs1.5参数优化 编辑:程序博客网 时间:2024/05/02 01:08

原文: 有没有一段代码,让你觉得人类的智慧也可以璀璨无比?


原文是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;
}



0 0
原创粉丝点击