# Drawing an Arc

**URL:** https://forum.kirupa.com/t/drawing-an-arc/172915
**Category:** flash
**Created:** [December 19, 2005, 4:47pm UTC](https://forum.kirupa.com/t/drawing-an-arc/172915 "2005-12-19T16:47:50Z")
**Posts on this page:** 1
**Page:** 1

<div class="post-metadata">

### Author: ![theFUZZYpickle](https://yyz1.discourse-cdn.com/flex011/user_avatar/forum.kirupa.com/thefuzzypickle/32/1436_2.png) [@theFUZZYpickle](https://forum.kirupa.com/u/theFUZZYpickle)
#### Post date: [December 19, 2005, 4:47pm UTC](https://forum.kirupa.com/t/drawing-an-arc/172915/1 "2005-12-19T16:47:50Z")

</div>

Hi everyone,

I’m trying to draw an arc (like a rainbow, with an outer radius and inner radius) in flash dynamically … here’s an example: [http://www.infosoftglobal.com/FusionCharts/IS/Site\_Doc/HelpDocs/Images/CO\_Arc\_1.gif](http://www.infosoftglobal.com/FusionCharts/IS/Site_Doc/HelpDocs/Images/CO_Arc_1.gif) . However, I’m having trouble drawing the inner radius. Also, I’m trying to do this without using a mask. If anyone can help out, it would be great:

```auto

	public static function drawArc(mc:MovieClip, x_pos:Number, y_pos:Number, radius:Number, innerRadius:Number, startAngle:Number, endAngle:Number, styles:DrawingStyle):Void {
		styles.applyStyles(mc);
		if (endAngle < startAngle) {
			endAngle += 360;
		}
		
		var r:Number = radius;
		var n:Number = Math.ceil((endAngle - startAngle) / 45);
		var theta:Number = ((endAngle - startAngle) / n) * degToRad;
		var cr:Number = radius / Math.cos(theta / 2);
		var angle:Number = startAngle * degToRad;
		var cangle:Number = angle - theta / 2;
		
		var inner_r:Number = innerRadius;
		var inner_cr:Number = innerRadius / Math.cos(theta / 2);
		
		mc.moveTo(x_pos + inner_r * Math.cos(angle), y_pos + inner_r * Math.sin(angle));
		mc.lineTo(x_pos + r * Math.cos(angle), y_pos + r * Math.sin(angle));
		
		for (var i:Number = 0; i < n; i++) {
			angle += theta;
			cangle += theta;
			var endX = r * Math.cos(angle);
			var endY = r * Math.sin(angle);
			var cX = cr * Math.cos(cangle);
			var cY = cr * Math.sin(cangle);
			mc.curveTo(x_pos + cX, y_pos + cY, x_pos + endX, y_pos + endY);
		}
		
		mc.lineTo(x_pos + inner_r * Math.cos(angle), y_pos + inner_r * Math.sin(angle));
		
		angle = endAngle * degToRad;
		cangle = angle - theta / 2;
			    
		for (var i:Number = 0; i < n; i++) {
			angle += theta;
			cangle += theta;
			var endX = inner_r * Math.cos(angle);
			var endY = inner_r * Math.sin(angle);
			var cX = inner_cr * Math.cos(cangle);
			var cY = inner_cr * Math.sin(cangle);
			mc.curveTo(x_pos + cX, y_pos + cY, x_pos + endX, y_pos + endY);
		}
		
		mc.endFill();
	}

```

thank you,
