//Oleg Antipov //http://www.blog.anegmetex.com package aneg { import aneg.*; import flash.geom.*; import flash.display.*; dynamic public class ageMath { public function ageMath() { } //Находится ли Num в диапазоне lRange..uRange static public function inRange(Num:Number,lRange:Number,uRange:Number):Boolean { return ((Num > lRange) && (Num < uRange)); } //получить ближайшие число к arg - Val1 или Val2 static public function getClosest(arg:Number,Val1:Number,Val2:Number):Number { if(Math.abs(arg - Val1)< Math.abs(arg - Val2)) return Val1; return Val2; } //Получить случайное число из диапазона clow..chigh static public function Random(clow:Number, chigh:Number):Number { return Math.round(Math.random() * (chigh - clow)) + clow; } //Получить целое случайное число из диапазона clow..chigh static public function RandomInt(clow:int, chigh:int):int { return Math.round(Random(clow,chigh)); } //Равны ли числа Num и aNum с заданной погрешностью aprox static public function aproxEqual(Num:Number, aNum:Number, aprox:Number=0.00001):Boolean { return (Math.abs(aNum-Num)<=aprox); } //Перевести число val из диапазона A..B в диапазон C..D static public function RemapVal(val:Number,A:Number,B:Number,C:Number,D:Number):Number { return C + (D - C) * (val - A) / (B - A); } //Получить число из диапазона cx..cy, зависящей от коэфициента s. //если s=0.0 то возвращается cx. //если s=1.0 то возвращается cy. static public function Lerp(cx:Number,cy:Number,s:Number):Number { return cx + s*(cy - cx); } //Пересекаются ли две линии. static public function IsLinesCross(x11:Number,y11:Number,x12:Number,y12:Number, x21:Number,y21:Number,x22:Number,y22:Number):Boolean { // решаем систему методом Крамера var d:Number = (x12 - x11)*(y21 - y22) - (x21 - x22)*(y12 - y11); if (d == 0) return false;//Отрезки либо параллельны, либо полностью/частично совпадают var d1:Number = (x21 - x11)*(y21 - y22) - (x21 - x22)*(y21 - y11); var d2:Number = (x12 - x11)*(y21 - y11) - (x21 - x11)*(y12 - y11); var t1:Number = d1 / d; var t2:Number = d2 / d; if (t1 >= 0 && t1 <= 1 && t2 >= 0 && t2 <= 1) return true; //пересекаются else return false; //не пересекаются } } }