博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[C++] 几行代码生成漂亮图片,数学家就是牛!
阅读量:6310 次
发布时间:2019-06-22

本文共 5741 字,大约阅读时间需要 19 分钟。

 

信息获得处:

 分形:

  

  

代码:[采用宏定义的来选择绘制不同的图,所以把最后两个给注释掉了,因为宏冲突,想自己试试可以单独编译运行]

PS:生成的图片是ppm格式的要用格式工厂之类的软件进行转换,也可以自己在程序里直接把图片生成bmp或者其他格式的~

1 // NOTE: compile with g++ filename.cpp -std=c++11    2 #include 
3 #include
4 #include
5 #define DIM 1024 6 #define DM1 (DIM-1) 7 #define _sq(x) ((x)*(x)) // square 8 #define _cb(x) abs((x)*(x)*(x)) // absolute value of cube 9 #define _cr(x) (unsigned char)(pow ((x),1.0/3.0)) // cube root 10 #define F 11 12 unsigned char GR (int,int); 13 unsigned char BL (int,int); 14 15 unsigned char RD (int i,int j){ 16 #ifdef A 17 return (char)(_sq(cos(atan2(j-512,i-512)/2))*255); 18 #endif 19 20 #ifdef B 21 #define r(n) (rand ()%n) 22 static char c[1024][1024]; 23 return!c[i][j]?c[i][j]=!r(999)?r(256):RD ((i+r(2))%1024,(j+r(2))%1024):c[i][j]; 24 #endif 25 26 #ifdef C 27 float x=0,y=0; 28 int k; 29 for(k=0;k++<256;){ 30 float a=x*x-y*y+ (i-768.0)/512; 31 y=2*x*y+ (j-512.0)/512; 32 x=a; 33 if(x*x+y*y>4)break; 34 } 35 return log (k)*47; 36 #endif 37 38 #ifdef D 39 double a=0,b=0,c,d,n=0; 40 while((c=a*a)+(d=b*b)<4&&n++<880){ 41 b=2*a*b+j*8e-9-.645411; 42 a=c-d+i*8e-9+.356888; 43 } 44 return 255*pow ((n-80)/800,3.); 45 #endif 46 47 #ifdef E 48 static double k; 49 k+=rand ()/1./RAND_MAX; 50 int l=k; 51 l%=512; 52 return l>255?511-l:l; 53 #endif 54 55 #ifdef F 56 float s=3./(j+99); 57 float y=(j+sin ((i*i+_sq (j-700)*5)/100./DIM)*35)*s; 58 return (int((i+DIM)*s+y)%2+int((DIM*2-i)*s+y)%2)*127; 59 #endif 60 /* 61 #ifdef G 62 #define D DIM 63 #define M m[(x+D+ (d==0)-(d==2))%D][(y+D+ (d==1)-(d==3))%D] 64 #define R rand ()%D 65 #define B m[x][y] 66 return(i+j)?256-(BL (i,j))/2:0; 67 #endif 68 */ 69 /* 70 #ifdef H 71 #define A float a=0,b,k,r,x 72 #define B int e,o 73 #define C (x) x>255?255:x 74 #define R return #define D DIM 75 R BL (i,j)*(D-i)/D; 76 #endif 77 */ 78 return 0; 79 } 80 unsigned char GR (int i,int j){ 81 #ifdef A 82 return (char)(_sq (cos (atan2(j-512,i-512)/2-2*acos (-1)/3))*255); 83 #endif 84 85 #ifdef B 86 static char c[1024][1024]; 87 return!c[i][j]?c[i][j]=!r(999)?r(256):GR ((i+r(2))%1024,(j+r(2))%1024):c[i][j]; 88 #endif 89 90 #ifdef C 91 float x=0,y=0; 92 int k; 93 for(k=0;k++<256;){ 94 float a=x*x-y*y+ (i-768.0)/512; 95 y=2*x*y+ (j-512.0)/512; 96 x=a; 97 if(x*x+y*y>4)break; 98 } 99 return log (k)*47;100 #endif101 102 #ifdef D103 double a=0,b=0,c,d,n=0;104 while((c=a*a)+(d=b*b)<4&&n++<880){105 b=2*a*b+j*8e-9-.645411;106 a=c-d+i*8e-9+.356888;107 }108 return 255*pow ((n-80)/800,.7);109 #endif110 111 #ifdef E112 static double k;113 k+=rand ()/1./RAND_MAX;114 int l=k;115 l%=512;116 return l>255?511-l:l;117 #endif118 119 #ifdef F120 float s=3./(j+99);121 float y=(j+sin ((i*i+_sq (j-700)*5)/100./DIM)*35)*s;122 return (int(5*((i+DIM)*s+y))%2+int(5*((DIM*2-i)*s+y))%2)*127;123 #endif124 /*125 #ifdef G126 #define A 127 static int m[D][D],e,x,y,d,c[4],f,n;128 if (i+j<1){129 for (d=D*D;d;d--){130 m[d%D][d/D]=d%6?0:rand ()%2000?1:255;131 }132 for (n=1 return RD (i,j);133 #endif134 */135 /*136 #ifdef H137 #define E DM1 138 #define F static float 139 #define G for ( 140 #define H r=a*1.6/D+2.4;x=1.0001*b/D141 R BL (i,j)*(D-j/2)/D;142 #endif143 */144 return 0;145 }146 unsigned char BL (int i,int j){147 #ifdef A148 return (char)(_sq (cos (atan2(j-512,i-512)/2+2*acos (-1)/3))*255);149 #endif150 151 #ifdef B152 static char c[1024][1024];153 return!c[i][j]?c[i][j]=!r(999)?r(256):BL((i+r(2))%1024,(j+r(2))%1024):c[i][j];154 #endif155 156 #ifdef C157 float x=0,y=0;158 int k;159 for(k=0;k++<256;){160 float a=x*x-y*y+ (i-768.0)/512;161 y=2*x*y+ (j-512.0)/512;162 x=a;163 if(x*x+y*y>4)break;164 }165 return 128-log (k)*23;166 #endif167 168 #ifdef D169 double a=0,b=0,c,d,n=0;170 while((c=a*a)+(d=b*b)<4&&n++<880){171 b=2*a*b+j*8e-9-.645411;172 a=c-d+i*8e-9+.356888;173 }174 return 255*pow ((n-80)/800,.5);175 #endif176 177 #ifdef E178 static double k;179 k+=rand ()/1./RAND_MAX;180 int l=k;181 l%=512;182 return l>255?511-l:l;183 #endif 184 185 #ifdef F186 float s=3./(j+99);187 float y=(j+sin ((i*i+_sq (j-700)*5)/100./DIM)*35)*s;188 return (int(29*((i+DIM)*s+y))%2+int(29*((DIM*2-i)*s+y))%2)*127;189 #endif190 /*191 #ifdef G192 A;n;n++){193 x=R;y=R;194 if(B==1){195 f=1;196 for(d=0;d<4;d++){197 c[d]=M;198 f=f
2){B=f-1;}201 else{202 ++e%=4;203 d=e;204 if(!c[e]){205 B=0;M=1;206 }}}}}207 return m[i][j];208 #endif209 */210 /*211 #ifdef H212 F c[D][D];213 if(i+j<1){A;B;G;a
D/2){e=a;o=(E*x);c[e][o]+=0.01;}}}}}215 R C (c[j][i])*i/D;216 #endif217 */218 219 return 0;220 }221 222 void pixel_write (int,int);223 FILE *fp;224 int main (){225 fp = fopen ("MathPic.ppm","wb");226 fprintf (fp, "P6\n%d %d\n255\n", DIM, DIM);227 for(int j=0;j
http://www.cnblogs.com/zjutlitao/p/3915860.html
你可能感兴趣的文章
如何学习虚拟现实技术vr? vr初级入门教程开始
查看>>
第4 章序列的应用
查看>>
Mysql explain
查看>>
初识闭包
查看>>
java tcp socket实例
查看>>
011 指针的算术运算
查看>>
hdu1874畅通工程续
查看>>
rails 字符串 转化为 html
查看>>
java-学习8
查看>>
AOP动态代理
查看>>
Oracle序列
查看>>
xcodebuild命令行编译错误问题解决
查看>>
Yii2.0 下的 load() 方法的使用
查看>>
华为畅玩5 (CUN-AL00) 刷入第三方twrp Recovery 及 root
查看>>
LeetCode----67. Add Binary(java)
查看>>
母版页 MasterPage
查看>>
[转] ReactNative Animated动画详解
查看>>
DNS原理及其解析过程
查看>>
记录自写AFNetWorking封装类
查看>>
没想到cnblog也有月经贴,其实C#值不值钱不重要。
查看>>