1,画平面山脉
大概思路就是给定两个点(x1,y1),(x2,y2),然后取他们的中点(px,py),然后再取(x1,y1)和(px,py)的中点和(x2,y2)和(px,py)的中点,同时给定一个范围[-range,range]和一个比率rate,每次取中点后的中点纵坐标都加上这个范围内的随机值,每次中点后range都乘以rate来缩小range的范围。当两个点的横坐标小于某个值或者不能再取中点时就连接起来,即可。
递归方法的代码
public void draw(double x1,double y1,double x2,double y2,int range,double rate) {
if(Math.abs(x1-x2)<=1|range==0) {
//画线
g.drawLine((int)x1,(int) y1, (int)x2,(int) y2);
}else {
double Px=(x1+x2)/2;
double Py=(y1+y2)/2;
//在[-range,range]范围内震荡y值
Random random=new Random();
int num = random.nextInt(range*2) - range;
//缩小range
range = (int)(range*rate);
//递归调用
sm(x1,y1,Px,Py-num,range,rate);
sm(Px,Py-num,x2,y2,range,rate);
}
}
调用方法draw(x1,y1,x2,y2,500,0.55);的效果为
调用时加个for循环,加上填充图形等方法就可以完成平面山脉的绘制,效果如下: