|
|
|||||
диаграмма секторов
Решил сделать такую штучку ради интереса, с математикой не силен, поэтому рассуждал логически.
ВОобщем задача такая - на вход подается кол-во элементов ( секторов ) и их процентная ставка, от чего собственно зависит высота сектора ( это потом, не важно ) , - на выходе получаем диаграмму этих секторов, распределенных по кругу. http://stackoverflow.com/questions/1...-like-this-one По ссылке выше пример того, что хочу получить, только без черной сетки и всегда с дугой. Вот собственно так начал решать эту задачку : 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; } То есть по итогу, сектора должны занимать весь круг...
__________________
Марк Tween |
Часовой пояс GMT +4, время: 19:17. |
|
« Предыдущая тема | Следующая тема » |
|
|