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

代码

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值