Показать сообщение отдельно
Старый 21.04.2013, 11:19
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 4  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Циферки можно менять/удалять/добавлять новые:
SectorDiagram.swf   (2.2 Кб)

drawDiagram.as
Код AS3:
package  
{
	import flash.display.DisplayObjectContainer;
	import flash.display.Graphics;
	import flash.display.Sprite;
	/**
	 * ...
	 * @author wolsh
	 */
	public function drawDiagram (container:DisplayObjectContainer, radius:Number, values:Array):void
	{
		var k:Number = radius / Math.max.apply(null, values);
		var sectors:uint = values.length;
		var sectorAngle:Number = 2 * Math.PI / sectors;
 
		for (var i:uint = 0; i < sectors; i++)
		{
			var color:uint = 0x808080 + Math.random() * 0x404040;
			var startAngle:Number = i * sectorAngle;
			var sectorRadius:Number = values[i] * k;
			var sector:Sprite = new Sprite();
			container.addChild(sector);
 
			// calculate fragments (18 gradians max at one step for cute round curve)
			var frags:Number = Math.abs( Math.ceil(sectorAngle * 10 / Math.PI) ); 
			if (sectorAngle < 0) frags += 1;
			var fragAngle:Number = sectorAngle / frags;
			// control points radius
			var controlOutRadius:Number = sectorRadius / Math.cos( -fragAngle / 2);
			// start drawings
			var g:Graphics = sector.graphics;
			g.lineStyle(1, 0xFFFFFF)
			g.beginFill(color);
			g.moveTo(0, 0);
			var startX:Number = sectorRadius * Math.cos(startAngle);
			var startY:Number = sectorRadius * Math.sin(startAngle);
			g.lineTo(startX, startY);
			// arc
			for (var j:uint = 1; j < frags + 1; j++) 
			{
				var aA:Number = startAngle + fragAngle * j;
				var aX:Number = sectorRadius * Math.cos(aA);
				var aY:Number = sectorRadius * Math.sin(aA);
				var cA:Number = aA - fragAngle / 2;
				var cX:Number = controlOutRadius * Math.cos(cA);
				var cY:Number = controlOutRadius * Math.sin(cA);
				g.curveTo(cX, cY, aX, aY);
			}
			g.lineTo(0, 0);
		}
	}
}
Main.as
Код AS3:
package 
{
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.text.TextField;
	import flash.text.TextFormat;
 
	/**
	 * ...
	 * @author wolsh
	 */
	public class Main extends Sprite 
	{
		private var _txt:TextField;
		private var _diagram:Sprite;
 
		public function Main():void 
		{
			if (stage) init();
			else addEventListener(Event.ADDED_TO_STAGE, init);
		}
 
		private function init(e:Event = null):void 
		{
			removeEventListener(Event.ADDED_TO_STAGE, init);
			// entry point
			_diagram = new Sprite();
			addChild(_diagram);
			_diagram.x = _diagram.y = 220;
			var data:Array = [300, 250, 320, 115, 234, 52, 186, 256, 370];
			drawDiagram(_diagram, 200, data);
			_txt = new TextField();
			_txt.defaultTextFormat = new TextFormat("Arial", 18, 0x808080);
			_txt.wordWrap = true;
			_txt.type = "input";
			_txt.background = true;
			_txt.backgroundColor = 0x505050;
			addChild(_txt);
			_txt.x = 440;
			_txt.y = 180;
			_txt.width = 310;
			_txt.height = 100;
			_txt.text = data.toString();
			_txt.addEventListener(Event.CHANGE, handlerChange);
		}
 
		private function handlerChange(event:Event):void 
		{
			var data:Array = _txt.text.split(',');
			_diagram.removeChildren();
			drawDiagram(_diagram, 200, data);
		}
 
	}
 
}
Вложения
Тип файла: swf SectorDiagram.swf (2.2 Кб, 165 просмотров)
__________________
Reality.getBounds(this);