Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему  
Старый 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

Создать новую тему   Часовой пояс GMT +4, время: 19:17.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 19:17.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.