您的位置:首页 > 其它

用中点位移法绘制山脉的一个粗糙AS3演示

2009-05-26 16:33 190 查看
代码

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();
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐