绕x轴旋转后的点(x1,y1,z1)
绕y轴旋转后的点(x2,y2,z2)
绕z轴旋转后的点(x3,y3,z3)
x1=x
y1=y*cosb+z*sinb
z1=z*cosb-y*sinb
x2=x*cosb-z*sinb
y2=y
z2=z*cosb+x*sinb
y3=y*cosb+x*sinb
z3=z

ratio=d/(d+z);
y1=ratio*y;同理可推出
x1=ratio*x;


推出:x1=r(cosa*cosb-sina*sinb)
又因为x=r*cosa,y=r*sina
所以x1=x*cosb-y*sinb
同样推出:y1=y*cosb+x*sinb
绕x轴旋转后的点(x1,y1,z1)
绕y轴旋转后的点(x2,y2,z2)
绕z轴旋转后的点(x3,y3,z3)
x1=x
y1=y*cosb-z*sinb
z1=z*cosb+y*sinb
z1=z*cosb-y*sinb
x2=x*cosb-z*sinb
y2=y
z2=z*cosb+x*sinb
z旋转(z不变)
x3=x*cosb-y*sinb
y3=y*cosb+x*sinb
z3=z
var mcNums:Number=3;
var mcArr:Array = new Array();
var rocArr_x:Array=new Array(100,-100,0);
var rocArr_y:Array=new Array(0,10,0);
var rocArr_z:Array=new Array(-100,0,0);
var hutu:Number=0.001;// 控制旋转的速度
var jiaodu:Number=hutu*180/Math.PI;
var distance:int=1000;
initConfig();
//初始化
function initConfig():void {
for (var i=1; i<=mcNums; i++) {
var t:MovieClip=doDrawRoundRect();
//t.angle = i * ((Math.PI*2)/mcNums);
this.addChild(t);
mcArr.push( t );
}
addEventListener(Event.ENTER_FRAME, EnterFrame);
}
//刷频
function EnterFrame(e:Event) {
for (var i = 0; i<mcNums; i++) {
// 按公式计算
var x1=rocArr_x[i]*Math.cos(jiaodu)-rocArr_z[i]*Math.sin(jiaodu);
var y1=rocArr_y[i];
var z1=rocArr_z[i]*Math.cos(jiaodu)+rocArr_x[i]*Math.sin(jiaodu);
//赋值
rocArr_x[i]=x1;
rocArr_y[i]=y1;
rocArr_z[i]=z1;
// 更新数组元素
var ratio:Number = distance/(distance+z1);
var perspective_x=x1*ratio;
var perspective_y=y1*ratio;
var perspective_z=z1*ratio;
// 赋值X Y坐标
mcArr[i].x=stage.stageWidth/2+perspective_x;
mcArr[i].y=stage.stageHeight/2-perspective_y;
// mc的大小
mcArr[i].scaleX=mcArr[i].scaleY=80*ratio/100;
mcArr[i].alpha=50*ratio
// mc的层次
this.setChildIndex(mcArr[i],ratio);
}
}
//产生随机颜色的矩形影片
function doDrawRoundRect():MovieClip {
var size:uint=80;
var bgColor:uint=Math.random()*0xffffff;
var borderColor:uint=0x666666;
var borderSize:uint=0;
var cornerRadius:uint=9;
var gutter:uint=5;
var child:MovieClip = new MovieClip();
child.graphics.beginFill(bgColor);
child.graphics.lineStyle(borderSize, borderColor);
child.graphics.drawRoundRect(0, 0, size, size, cornerRadius);
child.graphics.endFill();
return child;
}
















