Приятные мелочи

Вслед за Vogd хочу выложить ещё парочку полезных функций.
Большая часть из них знакома из курса школьной геометрии, а что-то уже давно известно и лежит открыто в сети. Думаю будет полезно.
Подкорректировал согласно комментариям, если доберёт до хорошего уровня, можно будет перенести в тематический раздел.


//угол между прямой Х, и отрезком соединяющим две точки.
//удобно использовать для поворота объекта в сторону второй точки
private function direction(x1, y1, x2, y2)
{
return Math.atan2(y2-y1,x2-x1)/Math.PI*180;
}



//дистанция между двумя точками         
private function distance(x1, y1, x2, y2)
{
return Math.sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
}



//возвращает середину между двумя числами. удобно если необходимо найти центр чегото
private function half(min:Number, max:Number):Number
{
return (min+max)*0.5;
}


//абсолютное расстояние между двумя числами (таже дистанция но в одномерном случае)
private function len(fir:Number, sec:Number):Number{
        return ((fir - sec)>0)?(fir - sec):-(fir - sec)
}



// плавный поворот до нужного угла (высчитывается наиболее оптимальное направление)
//параметры: текущий угол, новый угол, количество шагов поворота
private function myRotation(curangle:Number, newangle:Number, step:Number):Number
{
var dif:Number = Math.abs(newangle - curangle) 
while (dif >= 360) dif -= 360;
if (dif > 180) dif = 360 - dif;
dif =(dif>0)?dif:-dif;
var temp:Number = Math.sin((newangle - curangle) * Math.PI / 180);
if (curangle != newangle) curangle += Math.min(step, dif) * temp;
return curangle;
}
  • +6

Комментарии (13)

+1
Куча неоптимального кода.
Например надо не Math.pow(y1-y2,2)) а (y1-y2)*(y1-y2), ну и остальное, типа не =Math.abs(var), a =(var>0)?var:-var;
0
возможно, использую сам тормозов не наблюдалось
мну кажется это всё опционально, для восприятия и понимания легче использовать ф-ции нежели тернарные операторы. Ведь вместо Math.PI сразу писать 3,141592 тоже не всегда разумно/коротко/оптимально =)
хотя если всё-таки критично, всегда можно будет подкорректировать, статейки редактируемые =)
0
Смотря какой проект. Понятно что тот-же if вместо Math.abs не в 10 раз повышает производительность, но все-же быстрее. А флеш достаточно медленен все-равно и когда упираешься в его возможности то важность оптимизации становится заметной.
0
1. len и half бестолковые функции. Во флеше иногда вызов функции выполняется медленее, чем само тело функции. Поэтому в критичные куски кода(по производительности) заменяют вызовы функций на inline вставки
2. Деление лучше везде где возможно заменять умножением: half = (min+max)*0.5
3. Math.PI * 180 — лучше вычислить заранее

Такие элементарные ф-ии обычно вызываются дост. часто, поэтому лучше позаботится об их оптимизации.
0
Ага надо сделать фичу как на ютубе «ответ на пост» и написать оптимальные варианты, чтоб не учить плохому.
0
можно просто топик заминусовать :D
0
Хабр 2.0 :)
+1
Вот что мне не нравится на хабре так это болезненное сремление опустить в грязь другого и самому сорвать на этом плюсов. Давайте стараться за новым форматом общения не растерять позитивного настроя к комрадам и желания помочь, а не «заминусовать».
+1
Уважаемые гуру, пишите пост по оптимизации ;)
0
Да в самом деле. Гуру напишите пост по оптимизации. Выложите свои полезные, быстрые и оптимальные функции в подобном виде. Это будет полезно всем и новичкам и другим гуру.
+1
От оптимизаторов, оптимизаторам:
http://osflash.org/as3_speed_optimizations#as3_speed_tests
http://wiki.joa-ebert.com/index.php/Category:Code_Optimization
http://rockonflash.wordpress.com/2007/08/11/optimizations-for-as3-calculations/
http://www.nbilyk.com/optimizing-actionscript-3
http://www.richnetapps.com/as3-performance-optimization/
http://www.leebrimelow.com/?p=1397
http://oreilly.com/insideria/index.html
http://bimeanalytics.com/blog/optimize-flex-flash-app-as3-performance-explorer/
http://artman.fi/2009/06/as3-sorting-algorithm-faster-than-native-sorting/
http://lab.polygonal.de/2007/05/10/bitwise-gems-fast-integer-math/
http://lostinactionscript.com/2009/02/25/fitc-amsterdam-presentation/
http://jacksondunstan.com/articles/506
http://weblog.mrinalwadhwa.com/2010/11/22/loop-unwinding-for-fast-loops-in-as3/
0
+
gskinner.com/talks/quick/
www.stephencalenderblog.com/?cat=5

у jacksondunstan.com вообще много статей по фишкам.
0
www.stephencalenderblog.com/?p=12
www.stephencalenderblog.com/?p=25
www.stephencalenderblog.com/?p=19

Сообщение иногда отправляются просто так
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.