VC用递归的方法画分形图

分形几何是数学领域里新兴的课题,如果将图形的每个元素按某种规则进行变形,得到新的图形,以此类推,进行若干次变形后得到的图形就是分形图形。Couch曲线是最典型的分形图形:

将一条线段按照图1进行变换,得到图1,再将图1中的每条线段按图1的折线变换得到图2,以此类推,进行6次变换就得到图6,如果进行无限次变换,就得到的是Couch曲线,Couch曲线的维数不是整数维,更多详情请见分形方面的书籍。

用分形图形能画图许多漂亮的图案而被广泛地应用,下面将几个简单的分形图形的代码与图形大家分享。

//Couch曲线的画法
void Couch(CDC *pDC,int x1,int y1,int x2,int y2,int n)
{
//pDC是画图的设备上下文的指针
//x1,y1,x2,y2是起始的两点
//其中参数n是递归的层数
int x3,y3,x4,y4,x5,y5;
//以下是根据空间几何计算出来的坐标
x3=x1+(x2-x1)/3;
y3=y1+(y2-y1)/3;
x4=x1+(x2-x1)*2/3;
y4=y1+(y2-y1)*2/3;
x5=x3+(x4-x3)/2+int(sqrt(3)*(y4-y3)/2);
y5=y3-int(sqrt(3)*(x4-x3)/2)+(y4-y3)/2;
//递归最后一层,递归的出口
if(n==1)
{
pDC->MoveTo(x1,y1);
pDC->LineTo(x3,y3);
pDC->LineTo(x5,y5);
pDC->LineTo(x4,y4);
pDC->LineTo(x2,y2);
}
else
{
//递归画图
Couch(pDC,x1,y1,x3,y3,n-1);
Couch(pDC,x3,y3,x5,y5,n-1);
Couch(pDC,x5,y5,x4,y4,n-1);
Couch(pDC,x4,y4,x2,y2,n-1);
}
}

//斯宾斯基篓垫的画法
void Floor(CDC *pDC,int x1, int y1,int x2,int y2,int x3,int y3,int n)
{
//pDC是画图的设备上下文的指针
//x1,y1,x2,y2,x3,y3是起始的三角形的三点坐标
//其中参数n是递归的层数
int x11,x22,x33,y11,y22,y33;
//以下是根据空间几何计算出来的坐标
x11=(x2+x3)/2;
y11=(y2+y3)/2;
x22=(x1+x3)/2;
y22=(y1+y3)/2;
x33=(x1+x2)/2;
y33=(y1+y2)/2;

pDC->MoveTo(x11,y11);
pDC->LineTo(x22,y22);
pDC->MoveTo(x11,y11);
pDC->LineTo(x33,y33);
pDC->MoveTo(x22,y22);
pDC->LineTo(x33,y33);
//递归最后一层,递归的出口
if(n==1)
{
pDC->MoveTo(x11,y11);
pDC->LineTo(x22,y22);
pDC->LineTo(x33,y33);
pDC->LineTo(x11,y11);
}
else
{
//递归画图
Floor(pDC,x1,y1,x33,y33,x22,y22,n-1);
Floor(pDC,x33,y33,x2,y2,x11,y11,n-1);
Floor(pDC,x22,y22,x11,y11,x3,y3,n-1);
}
}

时间: 2024-10-31 13:45:44

VC用递归的方法画分形图的相关文章

用Swt的canvas画图后,怎样保存所画的图,需要写详细点

问题描述 如题 解决方案 解决方案二:不懂,帮顶~解决方案三:我的实现方法是把你画的图的数据保存在一个文件中,比如是一个多边型,然后把点的坐标保存在一个File中,下次用到的时间只是去读这个文件就可以了,当然具体情况还是要具体处理的我个人是这样处理的,解决方案四:我已经实现了,还是比较简单的,但现在最郁闷的就是,只能够获取当前canvas区域的所画图片,却不能够获取整个图片.(图片大小比画板大).解决方案五:不懂解决方案六:呵呵你这样的需求我个人觉得要用到gef框架了解决方案七:貌似gis中的地

面向对象设计:微波炉,做好画类图说明

问题描述 面向对象设计:微波炉,做好画类图说明 如果设计微波炉的工作程序?谁有想法能讲讲?最好画类图解释,注意可拓展性 解决方案 class 炉 { public void 加热() { } } class 微波炉 extends 炉 { DateTime 加热时间; double 电压; public void 加热() { } public void 通电() { } public void 开关() { } } 解决方案二: 你的类结构和方法已经很清楚了!

画数据库图,然后生成对应的表的疑问

问题描述 我想做一个小程序..功能是画出数据库的表(写上属性,方法,约束)然后根据画的图..生成一个表~~不知该用什么技术??本人很想做出这个小程序...请各位指教~~ 问题补充:laorer 写道 解决方案 你熟悉哪个就用哪个,如果都不熟悉,你可以试下 html + div + javascript(jquery)操作起来比较容易,不过似乎要把生成的内容传给后台去处理,而且各个属性都要动态的存储在相应的div的属性中swing的话,开始可能会有点烦琐,不过可以直接是桌面应用,而且设计成可以一个

求助一道画ER图的题目

问题描述 求助一道画ER图的题目 本人初学数据库,老师布置了一个ER图的作业,想了很久还是觉得很混乱题目大致如下:一个健康公司正在进行一个试药项目,该项目通过志愿者试药来确定药是否有副作用.在每一次试药中,一个药品会被多个志愿者尝试.这个项目是由一个志愿者试药,然后报告这个药是否有副作用,每个报告需要记录两个内容:1,志愿者是否有副作用 2,如果有,这个副作用是什么,有可能一个志愿者有多个副作用 没有已定义的副作用,因为副作用是不断被发现的然后,约束条件:1,每个志愿者只能尝试一种药2,关于志愿

用递归的方法将树形结构生成文本并输出

今天下午,吃饱了没事干,突然想写点什么,于是不由自主地想起了某件往事,当年在做XXX的时候好像有一个功能没有做出来.据说算法很复杂,当时就没有研究. 不过,今天想到用递归的方法,把这个功能大致做出来了,虽然称不上完美,至少还是比较简单的,而且代码也不多,才几行. 先给大家看看运行结果,如下图: 其实我说的这么神秘,也没什么,就是这个,把树形的目录结构输出到一个TXT文件中. 其实当初的项目要求比这个更复杂,所以我当时没想到解决方法,不过,像上图这样,虽说远没有达标,不过,至少也不算很难看. 原理

[叩响C#之门]第4章 流程控制 4.7 循环语句深化练习:分形图

4.7 循环语句深化练习:分形图 你看,下面的图形是不是很漂亮?它们就是大名鼎鼎的分形图.

网站设计分析:画线框图容易忽略的几件事

通过工作中的观察与总结,我发现不少新人交互设计师以及产品人员,在画线框图时都会忽略一些重要内容,导致和视觉设计师的沟通成本增高.返工增多.工作效率下降.设计质量下降等重要问题.为了解决这些问题,一方面需要加强沟通,另一方面还需要多站在视觉的角度考虑线框图的设计,使大家的配合更默契. 那么具体怎样做呢?以下就是我工作中积累的一些心得,希望对大家有所帮助. 一.通过明暗对比表达 以前,我是这样画线框图的,这样能非常清晰的展示各模块元素之间的布局关系.然后我会告诉视觉,这些模块或元素之间的优先级关系是

visio怎么画UML图?

  visio怎么画UML图?          1.首先笔者用来做例子的是2010版的Visio 2.打开visio,选择如图红框中的"软件和数据库"选项 3.进入之后,选择"UML模型图" 4.选择右下角的"新建" 5.在弹出的页面中,在左下角的"顶层包"上右击

chart js canvas-使用chart.js在canvas上面画线形图bug

问题描述 使用chart.js在canvas上面画线形图bug 我使用chart.js画线形图,有几个筛选条件,第一次绘制没有问题,当第二绘制时显示的是正确的线形图,可是当鼠标在线形图上滑动的时候会出现第一次的线形图跟第二次的线形图闪烁,来回切换的情况. 我感觉是canvas这个标签有自己的缓存还是什么的,但是用网上的办法不管用 解决方案 兄弟,我刚遇到这个,仔细看chart.js的代码,找到解决办法了, myLineChart.destroy(); myLineChart =myNewChar