ЗАЦЕНИТЕ

Код:
var PositionCentreX = 250;
var PositionCentreY = 250;
var Radius = 150;
var Radius2 = 140;
var AmountSegments = 32;
var Thickness = 50;
var s = 200;
var pX;
var pY;
var P2 = 2*Math.PI;
var Rad = Math.PI/180;
TopsX1 = new Array();
TopsY1 = new Array();
TopsZ1 = new Array();
TopsX2 = new Array();
TopsY2 = new Array();
TopsZ2 = new Array();
for (Znak=1; Znak>-2; Znak -= 2) {
for (i=0; i<P2; i += 2*Math.PI/AmountSegments) {
TopsX1.push(0+Radius*Math.cos(i));
TopsY1.push(0-Radius*Math.sin(i));
TopsZ1.push(Znak*Thickness/2);
}
}
for (Znak=1; Znak>-2; Znak -= 2) {
for (i=0; i<P2; i += 2*Math.PI/AmountSegments) {
TopsX2.push(0+Radius2*Math.cos(i));
TopsY2.push(0-Radius2*Math.sin(i));
TopsZ2.push(Znak*Thickness/2);
}
}
_root.onEnterFrame = function() {
pX = -(PositionCentreX-_ymouse)*0.005;
pY = (PositionCentreY-_xmouse)*0.005;
_root.clear();
for (i=0; i<=AmountSegments*2; i++) {
cosX = Math.cos(pX*Rad);
sinX = Math.sin(pX*Rad);
cosY = Math.cos(pY*Rad);
sinY = Math.sin(pY*Rad);
PowY = TopsY1[i]*cosX-TopsZ1[i]*sinX;
PowX = TopsX1[i]*cosY+(TopsY1[i]*sinX+TopsZ1[i]*cosX)*sinY;
PowZ = -TopsX1[i]*sinY+(TopsY1[i]*sinX+TopsZ1[i]*cosX)*cosY;
TopsX1[i] = PowX;
TopsY1[i] = PowY;
TopsZ1[i] = PowZ;
PowY = TopsY2[i]*cosX-TopsZ2[i]*sinX;
PowX = TopsX2[i]*cosY+(TopsY2[i]*sinX+TopsZ2[i]*cosX)*sinY;
PowZ = -TopsX2[i]*sinY+(TopsY2[i]*sinX+TopsZ2[i]*cosX)*cosY;
TopsX2[i] = PowX;
TopsY2[i] = PowY;
TopsZ2[i] = PowZ;
}
this.lineStyle(0, 0xffffff, 100);
this.moveTo(PositionCentreX+TopsX1[0]*(s/(s+TopsZ1[0])), PositionCentreY+TopsY1[0]*(s/(s+TopsZ1[0])));
for (i=1; i<AmountSegments; i++) {
this.lineTo(PositionCentreX+TopsX1[i]*(s/(s+TopsZ1[i])), PositionCentreY+TopsY1[i]*(s/(s+TopsZ1[i])));
}
this.lineTo(PositionCentreX+TopsX1[0]*(s/(s+TopsZ1[0])), PositionCentreY+TopsY1[0]*(s/(s+TopsZ1[0])));
this.moveTo(PositionCentreX+TopsX1[AmountSegments]*(s/(s+TopsZ1[AmountSegments])), PositionCentreY+TopsY1[AmountSegments]*(s/(s+TopsZ1[AmountSegments])));
for (i=1; i<AmountSegments; i++) {
this.lineTo(PositionCentreX+TopsX1[i+AmountSegments]*(s/(s+TopsZ1[i+AmountSegments])), PositionCentreY+TopsY1[i+AmountSegments]*(s/(s+TopsZ1[i+AmountSegments])));
}
this.lineTo(PositionCentreX+TopsX1[AmountSegments]*(s/(s+TopsZ1[AmountSegments])), PositionCentreY+TopsY1[AmountSegments]*(s/(s+TopsZ1[AmountSegments])));
for (i=0; i<AmountSegments; i++) {
this.moveTo(PositionCentreX+TopsX1[i]*(s/(s+TopsZ1[i])), PositionCentreY+TopsY1[i]*(s/(s+TopsZ1[i])));
this.lineTo(PositionCentreX+TopsX1[i+AmountSegments]*(s/(s+TopsZ1[i+AmountSegments])), PositionCentreY+TopsY1[i+AmountSegments]*(s/(s+TopsZ1[i+AmountSegments])));
}
this.moveTo(PositionCentreX+TopsX2[0]*(s/(s+TopsZ2[0])), PositionCentreY+TopsY2[0]*(s/(s+TopsZ2[0])));
for (i=1; i<AmountSegments; i++) {
this.lineTo(PositionCentreX+TopsX2[i]*(s/(s+TopsZ2[i])), PositionCentreY+TopsY2[i]*(s/(s+TopsZ2[i])));
}
this.lineTo(PositionCentreX+TopsX2[0]*(s/(s+TopsZ2[0])), PositionCentreY+TopsY2[0]*(s/(s+TopsZ2[0])));
this.moveTo(PositionCentreX+TopsX2[AmountSegments]*(s/(s+TopsZ2[AmountSegments])), PositionCentreY+TopsY2[AmountSegments]*(s/(s+TopsZ2[AmountSegments])));
for (i=1; i<AmountSegments; i++) {
this.lineTo(PositionCentreX+TopsX2[i+AmountSegments]*(s/(s+TopsZ2[i+AmountSegments])), PositionCentreY+TopsY2[i+AmountSegments]*(s/(s+TopsZ2[i+AmountSegments])));
}
this.lineTo(PositionCentreX+TopsX2[AmountSegments]*(s/(s+TopsZ2[AmountSegments])), PositionCentreY+TopsY2[AmountSegments]*(s/(s+TopsZ2[AmountSegments])));
for (i=0; i<AmountSegments; i++) {
this.moveTo(PositionCentreX+TopsX2[i]*(s/(s+TopsZ2[i])), PositionCentreY+TopsY2[i]*(s/(s+TopsZ2[i])));
this.lineTo(PositionCentreX+TopsX2[i+AmountSegments]*(s/(s+TopsZ2[i+AmountSegments])), PositionCentreY+TopsY2[i+AmountSegments]*(s/(s+TopsZ2[i+AmountSegments])));
}
for (i=0; i<AmountSegments; i++) {
this.moveTo(PositionCentreX+TopsX1[i]*(s/(s+TopsZ1[i])), PositionCentreY+TopsY1[i]*(s/(s+TopsZ1[i])));
this.lineTo(PositionCentreX+TopsX2[i]*(s/(s+TopsZ2[i])), PositionCentreY+TopsY2[i]*(s/(s+TopsZ2[i])));
this.moveTo(PositionCentreX+TopsX1[i+AmountSegments]*(s/(s+TopsZ1[i+AmountSegments])), PositionCentreY+TopsY1[i+AmountSegments]*(s/(s+TopsZ1[i+AmountSegments])));
this.lineTo(PositionCentreX+TopsX2[i+AmountSegments]*(s/(s+TopsZ2[i+AmountSegments])), PositionCentreY+TopsY2[i+AmountSegments]*(s/(s+TopsZ2[i+AmountSegments])));
}
};