网络日志

FLASH正十二面体3D模型及as3代码

作者:小龙博客-网络日志 2010年09月14日  5条评论 分类:AS3 学习   

今天用flash做了一个正十二面体,整个效果全部使用as3代码实现,没有制作元件。正十二面体由十二个正五边形围成,化学中的富勒烯C20就是正十二面体结构,c20的命名是因为它有20个顶点。在用动画制作这个正十二面体之前,我用硬纸板剪下十二个相同的正五边形,手工制作了一个模型,仔细研究了它。我发现将一个正五边形与z轴垂直,即它在x——y平面上,则剩下11个正五边形可以通过将这个正五边形绕y轴和z轴分别旋转一定的度数得到,且度数值很有规律。依据这一点,我做出了正十二面体的3d动画模型。代码如下(代码下方另有正十二面体的FLASH动画分享,它的转动是与鼠标的位置响应的哦~):

var mcArr:Array=[];//放五边形的数组
var r:Number=60;//五边形半径
var d:Number=100;//中心到顶点距离
var sp:Sprite=new Sprite();//容器
sp.x=275,sp.y=200;
addChild(sp);
function drawFive(r:Number=60,color:Number=0x0000ff):Sprite {
var pointArr:Array=[];
for (var i:int=0; i<5; i++) {
var point:Point=new Point();
point.x=r*Math.cos(i*Math.PI*2/5);
point.y=r*Math.sin(i*Math.PI*2/5);
pointArr.push(point);
}
var sp:Sprite=new Sprite();
sp.graphics.lineStyle(0,0x000000);
sp.graphics.beginFill(color,0.9);
sp.graphics.moveTo(pointArr[0].x,pointArr[0].y);
for (i=1; i<=5; i++) {
sp.graphics.lineTo(pointArr[i%5].x,pointArr[i%5].y);
}
sp.graphics.endFill();
return sp;
}
//画五边形的函数
for (var i:int=0; i<12; i++) {
var mc:Sprite=drawFive(r,Math.random()*0xffffff);
sp.addChild(mc);
mc.x=0;
mc.y=0;
mc.z=- Math.sqrt(d*d-r*r);//所有五边形初始时都与z轴垂直
mcArr.push(mc);
}
mcArr[6].transform.matrix3D.appendRotation(180,Vector3D.Y_AXIS);//将一个旋转到对面
for (i=1; i<=5; i++) {
mcArr[i].transform.matrix3D.appendRotation(116.56505,Vector3D.Y_AXIS);//相邻面夹角为116.56505度
mcArr[i].transform.matrix3D.appendRotation(36-(i-1)*72,Vector3D.Z_AXIS);//绕z轴分布
mcArr[i+6].transform.matrix3D.appendRotation(180+116.56505,Vector3D.Y_AXIS);//从前面转到斜后方
mcArr[i+6].transform.matrix3D.appendRotation(36-(i-1)*72,Vector3D.Z_AXIS);
}
addEventListener(Event.ENTER_FRAME,frame);
function frame(e) {
for (var i:int=0; i<mcArr.length; i++) {
mcArr[i].transform.matrix3D.appendRotation(-(mouseX-275)/10,Vector3D.Y_AXIS);
mcArr[i].transform.matrix3D.appendRotation((mouseY-200)/10,Vector3D.X_AXIS);//响应鼠标旋转
}
mcArr.sortOn("z",18);//按z轴排序
for (i=0; i<mcArr.length; i++) {
sp.setChildIndex(mcArr[i],i);//重新设置层深
}
}

本文标题:FLASH正十二面体3D模型及as3代码

网址:http://www.lxlong.com/blog/archives/2773.html

其他文章:
   
« »

5条评论

  1. 小林博客 说:

    确实没落了,现在基本不用了。

  2. liangzi82 说:

    好东西!
    最近做个地球模型,上面需要放上各种立方体, 正好可以看着楼主的这个学习下! 谢谢了!
    不过, flash越来越没落了 唉~

  3. 小林博客 说:

    sp.graphics.beginFill(color,0.9);
    改成这样就可以了
    sp.graphics.beginFill(color,1);

  4. 匿名 说:

    敢不敢做个不透明的。。。

  5. 小林博客 说:

    今天无意中看到以前做的这个12面体的动画效果,让我不由得又想起那些年如痴如醉地学习FLASH的日子,只是现在再也不会像从前那样去学习了。那真是一段美好的学习时光,也是一段值得回忆的人生经历……

发表评论 »