几行代码生成漂亮图片,数学家就是牛!

信息获得处:http://news.cnblogs.com/n/501488/

分形:http://baike.baidu.com/subview/83243/11213590.htm?fr=aladdin

  

  

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

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

  1 // NOTE: compile with g++ filename.cpp -std=c++11
  2 #include <iostream>
  3 #include <cmath>
  4 #include <cstdlib>
  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     #endif
101
102     #ifdef D
103     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     #endif
110
111     #ifdef E
112     static double k;
113     k+=rand ()/1./RAND_MAX;
114     int l=k;
115     l%=512;
116     return l>255?511-l:l;
117     #endif
118
119     #ifdef F
120     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     #endif
124 /*
125     #ifdef G
126     #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     #endif
134 */
135 /*
136     #ifdef H
137     #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/D
141     R BL (i,j)*(D-j/2)/D;
142     #endif
143 */
144     return 0;
145 }
146 unsigned char BL (int i,int j){
147     #ifdef A
148     return (char)(_sq (cos (atan2(j-512,i-512)/2+2*acos (-1)/3))*255);
149     #endif
150
151     #ifdef B
152     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     #endif
155
156     #ifdef C
157     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     #endif
167
168     #ifdef D
169     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     #endif
176
177     #ifdef E
178         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 F
186     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     #endif
190 /*
191     #ifdef G
192     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<c[d]?c[d]:f;
199             }
200             if(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     #endif
209 */
210 /*
211     #ifdef H
212     F c[D][D];
213     if(i+j<1){A;B;G;a<D;a+=0.1){G b=0;b<D;b++){H;G k=0;k<D;k++){x=r*x*(1-x);
214     if(k>D/2){e=a;o=(E*x);c[e][o]+=0.01;}}}}}
215     R C (c[j][i])*i/D;
216     #endif
217 */
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<DIM;j++)
228         for(int i=0;i<DIM;i++)
229             pixel_write (i,j);
230     fclose (fp);
231     return 0;
232 }
233 void pixel_write (int i, int j){
234     static unsigned char color[3];
235     color[0] = RD (i,j)&255;
236     color[1] = GR (i,j)&255;
237     color[2] = BL (i,j)&255;
238     fwrite (color, 1, 3, fp);
239 }

http://www.cnblogs.com/zjutlitao/p/3915860.html

时间: 2024-08-02 23:33:49

几行代码生成漂亮图片,数学家就是牛!的相关文章

[C++] 几行代码生成漂亮图片,数学家就是牛!

信息获得处:http://news.cnblogs.com/n/501488/ 分形:http://baike.baidu.com/subview/83243/11213590.htm?fr=aladdin 代码:[采用宏定义的来选择绘制不同的图,所以把最后两个给注释掉了,因为宏冲突,想自己试试可以单独编译运行] PS:生成的图片是ppm格式的要用格式工厂之类的软件进行转换,也可以自己在程序里直接把图片生成bmp或者其他格式的~ 1 // NOTE: compile with g++ filen

line-height行高与图片的隐匿文本间隙消除方法

1.块级元素中插入一个内联img元素后,产生多余间隙 代码 消除图片底部间隙几种方法 1.图片与底线对齐 2.图片元素块状化-无基线对齐 3.行高足够小,基线上移 4.消除隐匿文本字体大小 源码 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>Document</title> 6 &l

datagrid行中添加图片按钮

columns: [[ { field: 'id', title: '删除', width: 30, formatter: function (value,row,index) { var d = '<a href="#" onclick =DeleteById("' + row.id + '")><img src="/Images/delete.png" /></a>'; return d; } } ]] 主

Bootstrap 3之美03-独立行,文字环绕,图片自适应,隐藏元素

本篇主要包括: ■  添加独立的一行■  文字环绕■  图片自适应■  隐藏元素 添加独立的一行 在id为body的section和id为main的section之间,添加2张图片. 我们发现,新加的2张图片把主体内容挤到了右侧. 那么,我们如何处理新加的2张图片呢?--我们不太可能用container,因为它是页面布局层面的类名.但我们可以把这2张图片放在class名为row的div中. 我们还可以加更多的图片. 现在的图片还没有居中.考虑到总共有12个单元格,而4张图片只占了8个单元格,还空

用七牛sdk传递图片到七牛服务器

第一步申请七牛的开发者账号,申请完了之后,可以获取accesskey和secrect key 参照官方网站的java的demo 下载了依赖的jar包,放到/Library/Java/Extentiosns目录下 将对应的accesskey  secretkey填入 即可上传图片 import com.qiniu.util.Auth; import java.io.IOException; import com.qiniu.common.QiniuException; import com.qin

python学习---50行代码实现图片转字符画1

转自:https://blog.csdn.net/mm1030533738/article/details/78447714 项目链接: https://www.shiyanlou.com/courses/370/labs/1191/document from PIL import Image #从PIL模块中引入Image这个类import argparse  #引入argparse这个模块(argparse库是用来管理命令行参数输入的) parser = argparse.ArgumentP

php上传文件与图片到七牛的实例详解

上传文件到七牛最简单的方式就是使用七牛官方最新的SDK 用composer安装PHP SDK composer require qiniu/php-sdk 上传文件到七牛 use Qiniu\Auth;use Qiniu\Storage\UploadManager; $cfg = [ 'access' => 'YOUR_ACCESS_KEY', 'secret' => 'YOUR_SECRET_KEY', 'bucket' => 'YOUR_BUCKET', 'domain' =>

jmeterPlugin CMD命令行生成png图片及csv统计文件

Jmeter是个纯java的开源的轻量级性能测试工具,功能强大.因为是轻量级的,与loadrunner相比,报告统计的相对较少.不过有jmeter的插件-JMeterPlugins,可以提供不少其他的报告,包括各种响应时间.吞吐率.线程等的变化曲线等 并且这个插件提供了命令行工具,可以将我们看到的各种曲线,各种报告统计成png图片,或者csv文件.这样我们就完全可以通过命令行来运行jmeter,生成jtl文件,然后在解析jtl文件,产生各种报告,或者展示到网页,或者插入到数据库,等等. 英文地址

借助云开发10行代码生成小程序码,可以微信扫码快速进入指定小程序页

最近老有同学问我,如何生成小程序二维码,让用户扫码后能快速进入指定页面.经过一番研究,发现用云开发的云调用来实现特别方便,基本上10行代码就可以快速的生成指定页面的二维码.这样我们在做一些线下业务时就能让用户方便快速的进入到指定页面了,比如我们的点餐小程序,我们可以在二维码里绑定桌号,这样用户用微信扫码二维码,就可以快速的进入点餐页面了,并且可以识别到用户当前所在的桌号. 注意事项 我们生成的小程序码指定的页面,必须是你小程序已经发布,如果小程序还没有发布,获取小程序码绑定的页面不存在,扫码后就