代碼
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();
}