用RD,GR,BL三个方法内代码生成一张图片(非原创,我只是完整了代码)
我公开以下图片的源代码,,是ppm格式的,,自己找到能打开的工具..
请教高手一个问题,,
就是如何 调用动态方面名,,方面名均为后缀+数字,
希望可以根据动态方面名来调用不同的方法...
我觉得就是太多重复的代码了..我想用C++类泛型,,应该可以调用相应的方法.


以下是 C++ 的代码,,,
#include "stdafx.h" #include <iostream>
#include <cmath>
#include <cstdlib>
#include<Windows.h> #pragma warning(disable:4996) //全部关掉
#pragma warning(disable:4244) #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 RD1 (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 GR1 (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 BL1 (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;
} 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];
} unsigned char RD2 (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 GR2 (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 BL2 (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 RD3 (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 GR3 (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 BL3 (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 RD4 (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 GR4 (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 BL4 (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;
} void pixel_write (int,int);
FILE *fp; void pixel_write1(int i, int j)
{
static unsigned char color[3];
color[0] = RD1 (i,j)&255;
color[1] = GR1 (i,j)&255;
color[2] = BL1 (i,j)&255;
fwrite (color, 1, 3, fp);
} void pixel_write2 (int i, int j)
{
static unsigned char color[3];
color[0] = RD2 (i,j)&255;
color[1] = GR2 (i,j)&255;
color[2] = BL2 (i,j)&255;
fwrite (color, 1, 3, fp);
} void pixel_write3(int i, int j)
{
static unsigned char color[3];
color[0] = RD3 (i,j)&255;
color[1] = GR3 (i,j)&255;
color[2] = BL3 (i,j)&255;
fwrite (color, 1, 3, fp);
} void pixel_write4(int i, int j)
{
static unsigned char color[3];
color[0] = RD4 (i,j)&255;
color[1] = GR4 (i,j)&255;
color[2] = BL4 (i,j)&255;
fwrite (color, 1, 3, fp);
} int main ()
{
char t[256];
char printfHistory[2048]="正写入文件请稍等";
printf_s("printfHistory");
int num=0;
for(int a=1;a<6;a++)
{
sprintf_s(t,"MathPic%d.ppm",a);
fp = fopen (t,"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++)
{
switch (a)
{
case 1:
pixel_write(i,j);
case 2:
pixel_write1(i,j);
case 3:
pixel_write2(i,j);
case 4:
pixel_write3(i,j);
case 5:
pixel_write4(i,j);
default:
break;
}
}
}
printf_s("第 %d 张图片 写入成功!\n",a);
}
printf_s("所有图片已全部输出,请打开程序目录查看!");
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);
}
用RD,GR,BL三个方法内代码生成一张图片(非原创,我只是完整了代码)的更多相关文章
- HTML5结合CSS的三种方法+结合JS的三种方法
HTML5+CSS: HTML中应用CSS的三种方法 一.内联 内联样式通过style属性直接套进HTML中去. 示例代码 <pstylepstyle="color:red" ...
- Java方法内联
一.概念 方法内联就是把调用方函数代码"复制"到调用方函数中,减少因函数调用开销的技术 函数调用过程 1.首先会有个执行栈,存储它们的局部变量.方法名.动态连接 2.当一个方法 ...
- 是否可从一个static方法内发出对非static方法的调用?
不可以.因为非static方法是要与对象关联在一起的,必须创建一个对象后,才可以在该对象上进行方法调用,而static方法调用时不需要创建对象,可以直接调用.也就是说,当一个static方法被调用时, ...
- {Django基础十之Form和ModelForm组件}一 Form介绍 二 Form常用字段和插件 三 From所有内置字段 四 字段校验 五 Hook钩子方法 六 进阶补充 七 ModelForm
Django基础十之Form和ModelForm组件 本节目录 一 Form介绍 二 Form常用字段和插件 三 From所有内置字段 四 字段校验 五 Hook钩子方法 六 进阶补充 七 Model ...
- (PASS)JAVA数组去重 三种方法 (不用集合)
第一种方法(只学到数组的看): 定义一个新的数组长度和旧数组的长度一样,存储除去重复数据的旧数组的数据和0, package demo01; import java.sql.Array; import ...
- dedecms在首页或列表调取文章内容body的三个方法
有时需要在网站首页或栏目封面上显示几篇文章的内页作为导语或其他什么的,但acrlist标签是不能直接调取body的,这时我们就需要使用以下方法来调取body. 方法一:arcticle 标签 加上ch ...
- Quartz2D之生成圆形头像、打水印、截图三种方法的封装
我给UIImage类添加了一个类目,用于封装三个方法,每个方法都没有难度,做这个主要为了练习一下封装: 首先在类目.h文件中声明三个方法:以及创建了一个枚举.用于水印方法中设定水印位置:方法说明和参数 ...
- 深入理解为什么Java中方法内定义的内部类可以访问方法中的局部变量
好文转载:http://blog.csdn.net/zhangjg_blog/article/details/19996629 开篇 在我的上一篇博客 深入理解Java中为什么内部类可以访问外部类的成 ...
- Linux系统下修改环境变量PATH路径的三种方法
这里介绍Linux的知识,比如把/etc/apache/bin目录添加到PATH中有三种方法,看完之后你将学会Linux系统下如何修改环境变量PATH路径,需要的朋友可以参考下 电脑中必不可少的就是操 ...
随机推荐
- javascript之BOM对象(二location对象)
一.location对象提供和当前加载的文档相关的信息还有一些导航功能.location对象是window对象的属性,同时也是document对象的属性.window.location和documen ...
- Nginx+Mysql调优
使用nginx实现反向代理作用,具备负载均衡的功能. 接受客户端的请求 | nginx(宿主机) | |-------------------| web1 web2 (客户机) 原理: 与 ...
- django rest framework 序列化组件总结
序列化组件总结 一. 序列化组件本质上为了实现前后端分离,而进行json序列化的一个组件形式,极大方便了解析数据的作用 二. 所有序列化是基于APIView 解析器实现的,通过内部的多继承关系方便实现 ...
- Spring中@Autowired、@Resource和@Inject注解的使用和区别
在使用Spring进行项目开发的时候,会大量使用到自动装配,那自动装配是什么呢?简单来说:Spring 利用依赖注入(DI)功能,完成SpringIOC容器中各个组件之间的依赖关系赋值管理. 下面介绍 ...
- WPF系列 —— 控件添加依赖属性(转)
WPF系列 —— 控件添加依赖属性 依赖属性的概念,用途 ,如何新建与使用.本文用做一个自定义TimePicker控件来演示WPF的依赖属性的简单应用. 先上TimePicker的一个效果图. 概念 ...
- Win7下安装openssl
安装环境: 操作系统:window7(64位) C++编译器:VS2012 -------------------------------------------------------------- ...
- 织梦dedecms后台文件media_add.php任意上传漏洞解决办法
织梦在安装到阿里云服务器后阿里云后台会提示media_add.php后台文件任意上传漏洞,引起的文件是后台管理目录下的media_add.php文件,下面跟大家分享一下这个漏洞的修复方法: 首先找到并 ...
- restql 学习三 查询语言简单说明
restql 中with 参数的内容在restql 中实际上就是http request 的请求内容.按照restql 的设计 method 分为 from (get) , to (post) ,in ...
- Java 并发系列之四:java 多线程
1. 线程简介 2. 启动和终止线程 3. 对象及变量的并发访问 4. 线程间通信 5. 线程池技术 6. Timer定时器 7. 单例模式 8. SimpleDateFormat 9. txt ja ...
- 记一次Pr中视频蜜汁卡顿往复和解决方法
目录 问题 换素材的起因 灵异素材 无端联想 解决 问题 换素材的起因 本来视频剪了一晚剪完了,导出一看,好家伙,糊到上世纪.原来素材的像素大小都没法看,这视频素材我是从别人U盘拷过来的,可他竟然是用 ...