Показать сообщение отдельно
Старый 09.12.2015, 16:58
Larry вне форума Посмотреть профиль Отправить личное сообщение для Larry Найти все сообщения от Larry
  № 10  
Ответить с цитированием
Larry

Регистрация: Jun 2013
Сообщений: 4
Топик старый, но все-таки, может кому пригодится.

В поисках решения аналогичного вопроса попал на этот топик. Быстрого решения не нашел, пораскинул мозгами. Решение, в принципе, очень простое. Берем окружность, которая размером в 2 * Math.PI и делим на 16 частей, получается что-то вроде того:



И работаем уже с этими диапазонами.

Вот кривенький класс Helper по этим делам:
Код AS3:
public class IsoRotationStatesHelper 
	{
		public static const D:String = "D";
		public static const DL:String = "DL";
		public static const L:String = "L";
		public static const TL:String = "TL";
		public static const T:String = "T";
		public static const TR:String = "TR";
		public static const R:String = "R";
		public static const DR:String = "DR";
 
		private static const PART:Number = (Math.PI * 2) / 16;
 
		private static const Ddiap:Object = { min: PART * 1, max: PART * 3 };
		private static const DLdiap:Object = { min: PART * 3, max: PART * 5 };
		private static const Ldiap:Object = { min: PART * 5, max: PART * 7 };
		private static const TLdiap:Object = { min: PART * 7, max: PART * 9 };
		private static const Tdiap:Object = { min: PART * 9, max: PART * 11 };
		private static const TRdiap:Object = { min: PART * 11, max: PART * 13 };
		private static const Rdiap:Object = { min: PART * 13, max: PART * 15 };
		private static const DRdiap:Object = { min: PART * 15, max: PART * 1 };
 
                // Передаем значение в радианах
		public static function getState(rotation:Number):String
		{
			if (checkDiap(Ddiap, rotation)) return D;
			if (checkDiap(DLdiap, rotation)) return DL;
			if (checkDiap(Ldiap, rotation)) return L;
			if (checkDiap(TLdiap, rotation)) return TL;
			if (checkDiap(Tdiap, rotation)) return T;
			if (checkDiap(TRdiap, rotation)) return TR;
			if (checkDiap(DRdiap, rotation)) return DR;	
			if (checkDiap(Rdiap, rotation)) return R;
 
			return DR;
		}
 
		private static function checkDiap(object:Object, value:Number):Boolean
		{
			return value > object.min && value < object.max;
		}
Миниатюры
Нажмите на изображение для увеличения
Название: Безымянный.png
Просмотров: 666
Размер:	75.5 Кб
ID:	31896  


Последний раз редактировалось Larry; 09.12.2015 в 17:10.