随机L系统分形树 分类: 计算机图形学 2014-06-01 23:27 376人阅读 评论(0) 收藏
2014-06-01 23:27
417 查看
下面代码需要插入到MFC项目中运行,实现了计算机图形学中的L系统分形树。 class Node { public: int x,y; double direction; Node(){} }; CString way[3] ;//提供三种生成规则 CString rule,temprule; int len ; //单步长 int angle; //旋转转角度 int degree ; //迭代次数 int x,y ; //原点坐标 Node stack[1024]; int stackpointer; CTest18View::CTest18View() { way[0] = "F[+F]F[-F]F"; way[1] = "F[+F]F[-F[+F]]"; way[2] = "FF-[-F+F+F]+[+F-F-F]"; len =3 ; angle = 30 ; degree =5; x = 400 ; y = 500 ; stackpointer = 0 ; for (int i = 0 ; i <1024 ; i++ ) { stack[i].x = 0 ; stack[i].direction = NULL ; } rule = way[rand() % 3] ; for ( int i=1;i<= degree;i++) { int curlen = temprule.GetLength (); int pos=0 , j = 0 ; while (j < curlen) { if(temprule[j] == 'F' ) { rule += way[rand()%3 ]; j++; pos = rule.GetLength()-1 ; } else { rule += temprule[j] ; pos ++; j++; } } temprule = rule ; rule.Empty(); } rule = temprule ; } void CTest18View::OnDraw(CDC* pDC) { CTest18Doc* pDoc = GetDocument(); ASSERT_VALID(pDoc); if (!pDoc) return; CPen pen(PS_SOLID,1,RGB(0,0,255)); pDC->SelectObject(pen); Node Nextnode ,Curnode; Curnode.x = x ; Curnode.y = y ; Curnode.direction = 90 ; int length =rule.GetLength (); int i = 0; pDC ->MoveTo (x,y); while (i<length) { switch(rule[i]) { case 'F': Nextnode.x = Curnode.x + len * cos(Curnode.direction * PI /180); Nextnode.y = Curnode.y - len * sin(Curnode.direction * PI /180); Nextnode.direction =Curnode.direction ; pDC ->LineTo (Nextnode.x,Nextnode.y); Curnode = Nextnode; break ; case '[': stack[stackpointer] = Curnode; stackpointer ++; break; case ']': Curnode = stack[stackpointer-1]; stackpointer -- ; pDC ->MoveTo (Curnode.x,Curnode.y); break; case '+': Curnode.direction = Curnode.direction + angle; break; case '-': Curnode.direction = Curnode.direction -angle; break; default: ; } i++; } }
效果图如下:
相关文章推荐
- 查找数组中最大的2个数 分类: B10_计算机基础 2013-02-11 19:52 1041人阅读 评论(1) 收藏
- 分类算法简介 分类: B10_计算机基础 2015-03-09 11:08 257人阅读 评论(0) 收藏
- “概率模型与计算机视觉” 林达华 分类: 杂文 2014-11-03 09:32 126人阅读 评论(0) 收藏
- python zipfile模块 分类: python Module 2013-10-30 11:25 376人阅读 评论(0) 收藏
- Viola Jones Face Detector 分类: 计算机视觉(转载) 2014-08-04 11:07 139人阅读 评论(0) 收藏
- 命名管道实现进程间通信--石头、剪刀、布游戏 分类: linux 2014-06-01 22:50 467人阅读 评论(0) 收藏
- 8大排序算法图文讲解 分类: B10_计算机基础 2014-08-18 15:36 243人阅读 评论(0) 收藏
- 存储器的寻址问题 分类: 计算机组成原理 2011-04-04 23:24 477人阅读 评论(0) 收藏
- matlab实现算术编解码 分类: 图像处理 2014-06-01 23:01 357人阅读 评论(0) 收藏
- 用DriverStudio开发USB驱动程序 分类: USB OTG驱动 2015-06-12 10:34 376人阅读 评论(0) 收藏
- 计算机视觉领域的一些牛人博客,超有实力的研究机构等的网站链接 分类: 图像处理 2015-04-11 13:49 187人阅读 评论(0) 收藏
- 【转】数学专业的数学与计算机专业的数学的比较 分类: 杂文 2014-09-14 18:39 399人阅读 评论(0) 收藏
- egrep命令的实现 分类: 编译原理 2014-06-01 23:41 329人阅读 评论(0) 收藏
- 各种排序算法的分析及java实现 分类: B10_计算机基础 2015-02-03 20:09 186人阅读 评论(0) 收藏
- Mahout快速入门教程 分类: B10_计算机基础 2015-03-07 16:20 508人阅读 评论(0) 收藏
- 对计算机编码的认识 分类: 计算机组成原理 2011-08-31 20:51 729人阅读 评论(0) 收藏
- 另一个视角解读计算机编码-补码编码 分类: 计算机组成原理 2011-03-10 20:31 307人阅读 评论(0) 收藏
- 利用autotools工具制作从源代码安装的软件 分类: linux 2014-06-02 23:27 340人阅读 评论(0) 收藏
- red hat 9.0 上安装qt4 分类: 嵌入式开发学习 2011-05-14 23:27 598人阅读 评论(0) 收藏
- 计算机体系结构 分类: 工作生活经历 2009-06-14 13:01 143人阅读 评论(0) 收藏