- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第七章 形体的表示以及数据结构
第一节 分形图的递归算法
本节主要介绍几种简单分形图的递归算法实现
1.1 Cantor集
Cantor三分集的构造如下图所示,一条线段ab被均分为三段,保留其两边的两段,中间一段去掉,然后把得到的每一段再继续进行划分,如此反复。
?cantor的单文档应用程序框架;
(2)添加视图类CCantorView的成员函数,void cantor(CPoint p0,CPoint p1);
(3)程序结构代码,在CCantorView.cpp文件中相应位置添加如下代码
void CCantorView::cantor(CPoint p0,CPoint p1)
{
CClientDC pDC(this);
int dis=20;//直线长度的精度,控制递归次数
if((p1.x-p0.x)dis)
{
pDC.MoveTo (p0.x,p0.y);
pDC.LineTo (p1.x,p1.y);
}
else
{
CPoint p2,p3;
pDC.MoveTo (p0.x,p0.y);
pDC.LineTo (p1.x,p1.y);
p2.x = p0.x + (p1.x - p0.x) / 3;
p2.y = p0.y + 80;
p3.x = p1.x - (p1.x - p0.x) / 3;
p3.y = p1.y + 80;
p0.y = p0.y + 80;
p1.y = p1.y + 80;
cantor(p0,p2);
cantor(p3,p1);
}
}
(4)为了把三分康托集显示出来,需要在OnDraw()函数中中调用cantor函数,代码如下:
void CCantorView::OnDraw(CDC* pDC)
{
…….
CPoint p0,p1;
p0.x=100;p0.y=50;p1.x=800;p1.y=50;
cantor(p0,p1);
}
(5)程序执行结果
1.2 Koch曲线和Koch雪花
(1)创建应用程序框架,以单文档程序框架为基础,建立工程名称为koch的单文档应用程序框架
(2)编辑菜单资源
在工作区的[ResourceView]标签中,单击Memu项左边“+”,然后双击其子项IDR_MAINFRAME,并根据下表添加编辑菜单资源。
菜单标题 菜单项标题 标识符ID KOCH Koch曲线 ID_KOCH_CURVE Koch雪花 ID_KOCH_SNOW
(3)添加消息处理函数
利用ClasssWizard为应用程序添加与菜单项相关的消息处理函数,ClassName栏中选择
CkochView,建立如下的消息映射函数。
菜单项ID 消息 消息处理函数 ID_KOCH_CURVE COMMAND OnKochCurve ID_KOCH_SNOW COMMAND OnKochSnow
(4) 右键单击CkochView,选择Add Member Function,在弹出的对话框中,Function Type设为void,Function Declaration设为koch(CPoint p0,CPoint p1,int iter);单击确定。用同样的方法添加视图类CkochView的成员函数ClearScreen(),类型也为void
(5)添加程序结构代码
①在kochView.h中类定义之前定义一个存储点信息的如下结构的类,其中x,y设为double型主要为了计算的精度而考虑,保证在计算过程中较小的误差。
class CPOINT
{public:
Double x,y;
CPOINT()
{
}
~CPOINT()
{
}
};
②在CantorView.cpp文件中相应位置添加如下代码
void CKochView::koch(CPoint p0, CPoint p1, int iter)
{
CClientDC pDC(this);
CPoint r0,r1,r2;
if(iter==1)
{
pDC.MoveTo(p0.x,p0.y);
pDC.LineTo(p1.x,p1.y);
return;
}
if(iter1)
{
r0.x=p0.x+(p1.x-p0.x)/3;
r0.y=p0.y+(p1.y-p0.y)/3;
r1.x=p0.x+2*(p1.x-p0.x)/3;
r1.y=p0.y+2*(p1.y-p0.y)/3;
r2.x=(r1.x-r0.x)/2-(r1.y-r0.y)*sqrt(3)
您可能关注的文档
最近下载
- 新版《工会基础知识》试题库集及答案汇总-下(判断、填空、简答题).pdf VIP
- 海拔高度与气压、空气密度、重力加速度对照表.xls VIP
- Unit 5 Languages around the World 第3课时 Discovering useful structures grammar高一英语(人教版2019必修第一册).pptx VIP
- 老年人生理与心理概论知到课后答案智慧树章节测试答案2025年春白城医学高等专科学校.docx VIP
- 风险管理报告医疗器械.docx VIP
- 供应商管理卡.doc VIP
- 大学生职业生涯发展与规划(第二版)PPT完整全套教学课件.pptx VIP
- 基孔肯雅热如何预防培训课件.pptx
- 天然气体积流量计的典型故障问题 流量计解决方案.docx VIP
- 外研版英语八年级下册同步教材课本习题答案.docx VIP
文档评论(0)