java学习---山脉绘制

本文介绍了一种使用递归算法绘制山脉轮廓的方法。通过给定两个端点和一系列参数,如范围和比率,该算法在每次迭代中都会生成新的顶点,并调整其纵坐标值,以模仿山脉的自然形态。随着迭代进行,范围逐渐减小,最终形成连贯的山脉形状。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

绘制一个山脉轮廓

给定两个点(x1,y1),(x2,y2),递归取终点,同时给定一个范围[-range,range]和一个比率,
每次取中点后,这个中点的纵坐标的值加上这个范围内的随机值,同时range=range*rate,缩小这个范围
相邻的点连线,绘制成一个山脉的形状。

递归实现

public void divide(int xl,int xr,int yl,int yr,Graphics g,int range,double rate){
		
		if(xr-xl<=1){
			
			g.drawLine(xl, yl, xr, yr);
			
		}else{
			int x=(xr+xl)/2;
			int y=(yr+yl)/2;
			Random rand =new Random();
			int num=rand.nextInt(range*2)-range;
			range=(int)(range*rate);
			//System.out.println(range);
			//y+=num;
			//g.drawLine(xl, yl, xr, yr);
			divide(x,xr,y+num,yr,g,range,rate);
			divide(xl,x,yl,y+num,g,range,rate);
		}
	}

这是一个很简单的递归实现,代码中实现的是当两个点横坐标差值为1的时候开始连线,我们用递归写的时候不需要保存数据,因为递归不会导致数据的丢失。同时我们可以看到,我们用了int,没有用double,这是因为我们的像素点不能用小数表示。

try{
			Thread.sleep(200);
		}catch(InterruptedException e){
			e.printStackTrace();
		}

这一段可以睡眠,让绘图的图形有足够的时间画出来

效果图

在这里插入图片描述
当然我们依旧可以使用以前的重绘操作来使我们改变窗体后图像依旧显示

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值