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

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
По умолчанию диаграмма секторов

Решил сделать такую штучку ради интереса, с математикой не силен, поэтому рассуждал логически.
ВОобщем задача такая - на вход подается кол-во элементов ( секторов ) и их процентная ставка, от чего собственно зависит высота сектора ( это потом, не важно ) , - на выходе получаем диаграмму этих секторов, распределенных по кругу.
http://stackoverflow.com/questions/1...-like-this-one
По ссылке выше пример того, что хочу получить, только без черной сетки и всегда с дугой.
Вот собственно так начал решать эту задачку :

Код AS3:
public function drawDiagram(sectors:int , radius:Number , values:Array, triangulate:Boolean = false):void
		{
			var diameter:Number = radius * 2;
			var sectorMaxWidth:Number = 360 / sectors;
			var angleRotation:Number = 360 / sectors;
			var currentAngle:Number = angleRotation;
			var arcHeight:Number = radius - Math.sqrt(Math.abs(((Math.pow(radius,2) - Math.pow(sectorMaxWidth / 2, 2)))));
 
			var circle:Shape = new Shape();
			circle.graphics.beginFill(0);
			circle.graphics.drawCircle(0, 0, radius);
			addChild(circle)
 
			for (var i:int = 0; i < sectors; i++)
			{
				var firstSector:Shape = new Shape();
				firstSector.graphics.beginFill(randomColor);
				firstSector.graphics.lineStyle(1,0xFFFFFF)
				firstSector.graphics.lineTo( -sectorMaxWidth  , -radius + arcHeight);
				firstSector.graphics.curveTo( 0, -radius - arcHeight, sectorMaxWidth, -radius + arcHeight);
				firstSector.graphics.lineTo(0, 0);
 
				firstSector.rotation = currentAngle;
				addChild(firstSector);
 
				currentAngle += angleRotation;
 
			}
 
		}
 
		private function get randomColor():int
		{
			return Math.random()*0xFFFFFF;
		}
Собственно получается лажа, не могу понять именно в чем косяк, arcHeight ( взял формулу с нета ). Остальное собственно своими невеликими силами.
То есть по итогу, сектора должны занимать весь круг...
__________________
Марк Tween