Решил сделать такую штучку ради интереса, с математикой не силен, поэтому рассуждал логически.
ВОобщем задача такая - на вход подается кол-во элементов ( секторов ) и их процентная ставка, от чего собственно зависит высота сектора ( это потом, не важно ) , - на выходе получаем диаграмму этих секторов, распределенных по кругу.
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 ( взял формулу с нета ). Остальное собственно своими невеликими силами.
То есть по итогу, сектора должны занимать весь круг...