java:绘制分形树_【作业】简单分形树绘制程序

1.项目名称:简单分形树绘制程序

2.项目内容

设计一个简单的分形树显示程序,能够绘制几棵分形的树状图形。

3.功能设计思路

利用MFC制作这样一个绘图程序!采用随机LS文法,该方法在LS文法中引入随机变量。通过鼠标双击视图变化生成的分形植物,可以提高自己对于MFC基本架构的理解,提高自己的VC++编程能力,对于分形算法有所理解!

4.编码实施

首先建立一个利用向导生成一个MFC程序名为Tree;

右击菜单画圆在类向导中为CCTdrawView类添加OnLButtonDblClk事件,

为CCTdrawView添加变量:

CString unit[3] ;

CString tree , formtree;

int  len ;

int     angle;

int     degree ;

int ox,oy ; //原点坐标

CKNOT   stack[1024];

int     stackpushpos;

添加代码如下:

1 voidCMyTreeView::OnLButtonDblClk(UINT nFlags, CPoint point)2 {3 /构造函数,用于类的初始化///4 for (int i = 0 ; i <1024 ; i++)5 {6 stack[i].x = 0;7 stack[i].direction =NULL ;8 }9 stackpushpos = 0;10 formtree = unit[rand() % 3] ;11 tree.Empty ();12 //

13 intrandom ;14 for ( i = 1 ; i <= degree ; i++)15 {16 int curlen =formtree.GetLength ();17 int pos=0 , j = 0;18 while (j

28 {29 tree +=formtree[j] ;30 pos ++;31 j++;32 }33 }34 formtree =tree ;35 tree.Empty ();36 }37 tree =formtree ;38 Invalidate();39 }40 voidCMyTreeView::OnLButtonDblClk(UINT nFlags, CPoint point)41 {42 /鼠标双击事件的处理代码///

43 for (int i = 0 ; i <1024 ; i++)44 {45 stack[i].x = 0;46 stack[i].direction =NULL ;47 }48 stackpushpos = 0;49 formtree = unit[rand() % 3] ;50 tree.Empty ();51 //

52 intrandom ;53 for ( i = 1 ; i <= degree ; i++)54 {55 int curlen =formtree.GetLength ();56 int pos=0 , j = 0;57 while (j

67 {68 tree +=formtree[j] ;69 pos ++;70 j++;71 }72 }73

74 formtree =tree ;75

76 tree.Empty ();77 }78 tree =formtree ;79 Invalidate();80 }81 void CMyTreeView::OnDraw(CDC*pDC)82 {83 //绘制分形图形的代码84 CTreeDoc* pDoc =GetDocument();85 ASSERT_VALID(pDoc);86

87 AfxGetMainWnd()->SetWindowText("随机L系统(分形频道:fractal.cn)请双击窗体");88 if(tree.IsEmpty ())89 return;90 else

91 {92 CKNOT mNextKnot ,mCurKnot;93 mCurKnot.x =ox ;94 mCurKnot.y =oy ;95 mCurKnot.direction = 90;96 int treelength =tree.GetLength ();97 int i = 0;98 pDC ->MoveTo (ox,oy);99 while (iLineTo (mNextKnot.x ,mNextKnot.y);108 mCurKnot =mNextKnot ;109 break;110 case '[':111 stack[stackpushpos] =mCurKnot ;112 stackpushpos ++;113 break;114 case ']':115 mCurKnot = stack[stackpushpos-1];116 stackpushpos --;117 pDC ->MoveTo (mCurKnot.x,mCurKnot.y);118 break;119 case '+':120 mCurKnot.direction = mCurKnot.direction +angle;121 break;122 case '-':123 mCurKnot.direction = mCurKnot.direction -angle;124 break;125 default:126 ;127 }128 i++;129 }130 }131 //TODO: add draw code for native data here

132 }

5.功能实现

1153da88ecd5386a2a44e11c6875714e.png

6.总结

本设计实现了利用随机LS文法绘制简单的分形树的功能,双击窗体会显示不同的分形树。需要解决的问题比如数据的序列化问题,数据的缓冲处理,当数据量很大的时候重绘必须用的缓冲机制。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值