- 1、本文档共8页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Netjava project 寻找自然界的规律——递归分形
上一次我们用了简单的直线和迭代法画点的形式画出了美丽的图形,但是自然界除了有其神奇的特性,更多地是有规律可寻的。今天我们就要用递归来画出可以自己控制的图片!
?
我们先来介绍一下递归,所谓递归,就是自己的方法中还在调用自己的方法。但是实际上我们可以不用这样来考虑,我们就可以认为在方法中又调用了一个方法,这个方法和自己的方法的用途一样,只是带入的参数不同。在递归中我们要注意几点:1、注意退出条件的控制,递归是个死循环,没有退出条件就会一直递归下去,直至栈溢出,然后报错。2、递归时注意变量的传递和值的变化。3、我们还要关注进入时的参数值变化和返回时返回值的变化。
?
首先我们来画一个递归画直线的:
Java代码??
?/**?
?*?递归画直线的方法?
?*?@param?g图形对象?
?*?@param?x1第一个点横坐标?
?*?@param?y1第一个点纵坐标?
?*?@param?x2第二个点横坐标?
?*?@param?y2第二个点纵坐标?
?*?@param?count递归次数?
?*/??
public?void?drawline(Graphics?g,?int?x1,?int?y1,?int?x2,?int?y2,?int?count)?{??
????count--;??
????//如果count等于0就返回??
????if?(count??1)?{??
????????return;??
????}??
????g.drawLine(x1,?y1,?x2,?y2);//画线??
????drawline(g,?x1,?y1?+?50,?(int)?(2.0?/?3?*?x1?+?1.0?/?3?*?x2),?y2?+?50,??
????????????count);//递归画左边直线??
????drawline(g,?x2,?y2?+?50,?(int)?(2.0?/?3?*?x2?+?1.0?/?3?*?x1),?y1?+?50,??
????????????count);//递归画右边直线??
}??
??
正方形:
??
Java代码??
/**?
?*?画正方形的方法?
?*?@param?g图形对象?
?*?@param?x正方形中心横坐标?
?*?@param?y正方形中心纵坐标?
?*?@param?r正方形边长的一半?
?*?@param?count迭代次数?
?*/??
public?void?drawsquare(Graphics?g,?int?x,?int?y,?int?r,?int?count)?{??
????count--;??
????//如果count为0,返回??
????if?(count??1)?{??
????????return;??
????}??
????g.fillRect(x?-?r,?y?-?r,?2?*?r,?2?*?r);//画正方形??
????//迭代画周围的8个小正方形??
????drawsquare(g,?x?-?(int)?(r?*?2.5),?y?-?(int)?(r?*?2.5),?r?/?3,?count);??
????drawsquare(g,?x,?y?-?(int)?(r?*?2.5),?r?/?3,?count);??
????drawsquare(g,?x?+?(int)?(r?*?2.5),?y?-?(int)?(r?*?2.5),?r?/?3,?count);??
????drawsquare(g,?x?-?(int)?(r?*?2.5),?y,?r?/?3,?count);??
????drawsquare(g,?x?+?(int)?(r?*?2.5),?y,?r?/?3,?count);??
????drawsquare(g,?x?-?(int)?(r?*?2.5),?y?+?(int)?(r?*?2.5),?r?/?3,?count);??
????drawsquare(g,?x,?y?+?(int)?(r?*?2.5),?r?/?3,?count);??
????drawsquare(g,?x?+?(int)?(r?*?2.5),?y?+?(int)?(r?*?2.5),?r?/?3,?count);??
}??
?
三角形:
?
Java代码??
/**?
?*?画三角形?
?*?@param?g图形对象?
?*?@param?x1上边的横坐标?
?*?@param?y1上边的纵坐标?
?*?@param?x2左边的横坐标?
?*?@param?y2左边的纵坐标?
?*?@param?x3右边的横坐标?
?*?@param?y3右边的纵坐标?
?*?@param?count画三角形
文档评论(0)