代码
import flash.geom.Point;
var MINI = 0.5;//MINI指的是每个中点的振幅缩小速率
var W = stage.stageWidth;
var H = stage.stageHeight;
var iter:int = 5;//迭代次数,值越大,山脉越平滑
var left:Point,right:Point;
left = new Point(0, H-1);
right = new Point(W-1, H-1);
var hill:Sprite = new Sprite();
addChild(hill);
stage.addEventListener(MouseEvent.CLICK, myClick);
function myClick(e:MouseEvent):void
{
//Mid-point Displacement 中点位移法
//每次点击就用一种随机的颜色来画山脉
hill.graphics.lineStyle(2,Math.random()*256<<16|Math.random()*256<<8|Math.random()*256);
MD(left, right, 0);
}
function MD(l:Point, r:Point, i:int):void
{
if(i >= iter){
hill.graphics.moveTo(l.x, l.y);
hill.graphics.lineTo(r.x, r.y);
return;
}else{
var mx:Number = (l.x + r.x)/2;
var my:Number = (l.y + r.y)/2 + H*Math.pow(MINI,i)*myRand();
if (0 > my)
trace(my);
var mp:Point = new Point(mx, my);
MD(l, mp, i+1);
MD(mp, r, i+1);
}
}
//生成一个从-1到1的随机数
function myRand():Number
{
var positive:Boolean = Math.random() > 0.5 ? true:false;
if(positive)
return Math.random();
else
return 0 - Math.random();
}