采用递归算法来画分形图

209 阅读1分钟

这是我参与2022首次更文挑战的第18天,活动详情查看:2022首次更文挑战

 采用递归算法来画分形图

先看下运行结果:

分析

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

估计就没有什么大问题了

运行结果

​ 文章来自我的博客