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