
Приятные мелочи
Вслед за 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
- Ewanse
Комментарии (13)
Например надо не Math.pow(y1-y2,2)) а (y1-y2)*(y1-y2), ну и остальное, типа не =Math.abs(var), a =(var>0)?var:-var;
мну кажется это всё опционально, для восприятия и понимания легче использовать ф-ции нежели тернарные операторы. Ведь вместо Math.PI сразу писать 3,141592 тоже не всегда разумно/коротко/оптимально =)
хотя если всё-таки критично, всегда можно будет подкорректировать, статейки редактируемые =)
2. Деление лучше везде где возможно заменять умножением: half = (min+max)*0.5
3. Math.PI * 180 — лучше вычислить заранее
Такие элементарные ф-ии обычно вызываются дост. часто, поэтому лучше позаботится об их оптимизации.
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/
gskinner.com/talks/quick/
www.stephencalenderblog.com/?cat=5
у jacksondunstan.com вообще много статей по фишкам.
www.stephencalenderblog.com/?p=25
www.stephencalenderblog.com/?p=19
Сообщение иногда отправляются просто так