采用递归算法来画分形图
先看下运行结果:
分析
1.首先我们需要两个点(x1,y1,x2,y2),来确定一天直线,创建一个方法randFactary
2.确定直线中点(midx,midy),在其中点垂直方向上移或下移一定的距离,再调用方法randFactary,那么就体现出了递归思想
步骤:
1.创建一个有参方法
需要参数
leftX,leftY,rightX,rightY(两点确定一条直线)
创建Graphics对象:调用相应的方法来画图
public static void randFractal(int leftX,int leftY,int rightX,int rightY,Graphics drawArea){
int limit = 10;
int midX,midY;
int delta;
if(rightX - leftX <= limit){
drawArea.drawLine(leftX,leftY,rightX,rightY);
}else{
midX = (rightX + leftX)/2;
midY = (leftY + leftX)/2;
delta = (int)((Math.random()-0.5)*(rightX-leftX));
midY += delta;
randFractal(leftX,leftY,midX,midY,drawArea);
randFractal(midX,midY,rightX,rightY,drawArea);
}
2.将随机分形放入到Applet中
(采用Applet绘制固定的图形)
用init方法初始化该IGraphics对象在那个Image对象上绘图,将drawArea设置成一个可在Image上绘制的Graphics对象,那么想要在小应用程序上绘制一个随机分形,那么就需要用Graphics对象的drawArea实现。
public void init(){
int height = getSize().height;
int width = getSize().width;
display = createImage(width,height);
drawArea = display.getGraphics();
randFractal(0,height/2,width,height/2,drawArea);
}
当Applet开始执的时候(不需要Main方法,函数才执行),就会自动调用init方法,那么该方法就会将randFractal图像放入displa Image中
要真正的显示图像,需要调用paint方法
public void paint(Graphics g){
g.drawImage(display, 0, 0, null);
}
其实在这个例子中,最主要还是想表明一个“递归思想”,在这个例子中,运用到的递归思想
当然,在这个例子中,还考虑到一些Applet的相关用法以及在启用程序时,遇到程序为初始化问题
在使用Applet时,如果出现
警告: 无法读取 AppletViewer 属性文件: C:Users谭春霞.hotjavaproperties。请使用默认值。
可能需要配置一些东西,我在这儿简单说下
1.控制行(window+R)在其中输入 policytool
2
3.选择添加策略条目
.
4.点击进入,选择第一个选项
5.然后就是确定
6.点击文件,选择另存为,就是他推荐的储存路径就好文件名改为 .policy即可
.
那基本就可以了!!!就可以再返回去运行一下。
如果在使用Applet时,界面出现 启动:未初始化小应用程序
选择项目,选择properties
估计就没有什么大问题了
运行结果