class Umbrella { var r:Number, x0:Number, y0:Number; var r1:Number, r2:Number, r3:Number; var angles:Number = 8; var wh_ratio:Number = 0.7; var W = 400, H = 400; var theta0:Number = 0; //var tilt0:Number = 0; var cols:Array = new Array(); var N = 24; var col_id = 0; function Umbrella(r:Number, x0:Number, y0:Number){ this.r = r; this.x0 = x0; this.y0 = y0; init_cols(); } function setR1(r1:Number){ this.r1 = r1; this.r2 = r1 * wh_ratio; this.r3 = Math.sqrt(r*r-r1*r1); } function setTheta0(theta0:Number){ this.theta0 = theta0; } function setRot(){ this.theta0 += 0.1; } function changeCol(){ col_id++; col_id %= N; } function draw(mc:MovieClip){ drawOuter(mc); drawAxis(mc); for(var i:Number = 0; i < angles; i++){ var shift:Number = int(theta0 / (2 * Math.PI) * angles) + angles / 2; var new_i:Number = i - shift; if(new_i < 0) new_i += angles; var triangle:Array = getTriangle(new_i); mc.lineStyle(1, 0xccccff); mc.beginFill(0xeeeeee, triangle[6] * 0.4); mc.moveTo(triangle[4] + 1, triangle[5] + 4); for(var j:Number = 0; j < 3; j++){ mc.lineTo(triangle[j*2+0] + 1 , triangle[j*2+1]+ 4); } mc.endFill(); } for(var i:Number = 0; i < angles; i++){ var shift:Number = int(0.5 + theta0 / (2 * Math.PI) * angles + angles / 2) % angles; var new_i:Number = i - shift; if(new_i < 0) new_i += angles; var triangle:Array = getTriangle(new_i); mc.lineStyle(1.5, 0xffffff); mc.beginFill(cols[col_id], triangle[6]); mc.moveTo(triangle[4], triangle[5]); for(var j:Number = 0; j < 3; j++){ mc.lineTo(triangle[j*2+0], triangle[j*2+1]); } mc.endFill(); } } function getTriangle(n:Number){ var ret:Array= new Array(6); var x1:Number = getX(n); var y1:Number = getY(n); var x2:Number = getX(n+1); var y2:Number = getY(n+1); ret[0] = x0; ret[1] = y0 - r3 * 0.2; ret[2] = x0 + x1; ret[3] = y0 + y1 + r3 * 0.8; ret[4] = x0 + x2; ret[5] = y0 + y2 + r3 * 0.8; var area:Number = Math.abs(x1 * (y2+r3) - x2 * (y1+r3)); if(area < 1) area = 1; ret[6] = (r * r / area / 10 * 0.7 + 0.3) * 100; if(ret[6] > 200) ret[6] = 200; return ret; } function drawAxis(mc:MovieClip){ var axis_width = 2.5; mc.lineStyle(1, 0xddddff); mc.beginFill(0xffffff, 50); mc.moveTo(x0 - axis_width, y0 - r3 * 0.1); mc.lineTo(x0 - axis_width, y0 - r3 * 0.1 + r * 1.2); mc.lineTo(x0 + axis_width, y0 - r3 * 0.1 + r * 1.2); mc.lineTo(x0 + axis_width, y0 - r3 * 0.1); mc.endFill(); } function drawOuter(mc:MovieClip){ var axis_width = 2.5; mc.lineStyle(); mc.beginFill(cols[col_id]); mc.moveTo(0, 0); mc.lineTo(W, 0); mc.lineTo(W, H); mc.lineTo(0, H); mc.endFill(); mc.beginFill(0xffffff, 100); mc.moveTo(8, 8); mc.lineTo(W-8, 8); mc.lineTo(W-8, H-8); mc.lineTo(8, H-8); mc.endFill(); } function getX(n:Number) { return r1 * Math.cos(Math.PI * 2 / angles * n + theta0); } function getY(n:Number) { return r2 * Math.sin(Math.PI * 2 / angles * n + theta0); } function init_cols(){ var h_base = Math.random() * 2 * Math.PI; for(var i = 0; i < N; i++){ var h = i * Math.PI * 2.0 / N + h_base; var r = int(0x55 * Math.sin(h) + 0xdd); var g = int(0x55 * Math.sin(h + Math.PI * 0.67) + 0xdd); var b = int(0x55 * Math.sin(h + Math.PI * 1.33) + 0xdd); if(r > 0xff) r = 0xff; if(g > 0xff) g = 0xff; if(b > 0xff) b = 0xff; cols[i] = 0x10000 * r + 0x100 * g + b; } } }