Просмотр полной версии : Поворот в ближайшую сторону
Для поворотов пользуюсь TweenLite от greensock, если надо сделать поворот в ближайшую сторону тесть если у меня например надо повернуть от 10 градусов до 350 градусов стандартно надо в таком случаи менять 350 в -10. Какой функцией это можно сделать чтобы правильно работало?
RJ Presto
04.06.2012, 22:11
не очень понял вопрос
если надо просто угол преобразовать - то
if (angle > 180)
{
angle -= 360;
}
угол преобразовать, не надо, надо понять, что ближе минусовое или плюсовое значение.
ramshteks
04.06.2012, 23:04
https://github.com/ramshteks/as3bicycle-lib/blob/master/src/ramshteks/as3/math/geom/Angle.as#L23
вот метод(23 строчка), который дает минимальный угод между двумя заданными.(Знак означает направление). Писалось как раз под сходную с вашей задачу
Если это поможет конечно
Вроде как плагин же был у гринсока (или сразу встроеная функция) в твинмаксе, shortRotation, если не ошибаюсь. Если вам не принципиально, что использовать, TweenLite или TweenMax, конечно.
ramshteks, в вашем коде можно Math.PI / 180 вынести в отдельное поле :)
ramshteks
04.06.2012, 23:15
в вашем коде можно Math.PI / 180 вынести в отдельное поле
ради одного использования? Можно конечно, чтобы боб мартин был счастлив =)
Несчастный Боб — горе в семье.
public static function minAngle(from:Number, to:Number):Number
{
to = to % 360;
from = from % 360;
if(to < 0) to += 360;
if (from < 0) from += 360;
var cw:Number = to - from;
if (cw < 0) cw += 360;
var ccw:Number = from - to;
if (ccw < 0) ccw += 360;
return (cw < ccw ? cw : - ccw);
}
Партизан
05.06.2012, 07:23
Несчастный Боб — горе в семье.
Тогда наверное вот так для твинера лучше:
public static function minAngle(from:Number, to:Number):Number
{
...
return from + (cw < ccw ? cw : - ccw);
}
Для твинера — да; но, конечно, не стóит включать это в данную функцию))) дабы не испытать удивление. Либо функция должна быть названа и продокументирована соответственно, как преобразующая значение to.
Партизан
05.06.2012, 12:44
Для твинера — да; но, конечно, не стóит включать это в данную функцию))) дабы не испытать удивление. Либо функция должна быть названа и продокументирована соответственно, как преобразующая значение to.
Стырил себе так:
public static function minAngle(from:Number, to:Number, abs:Boolean = true):Number
{
to = to % 360;
from = from % 360;
if(to < 0) to += 360;
if (from < 0) from += 360;
var cw:Number = to - from;
if (cw < 0) cw += 360;
var ccw:Number = from - to;
if (ccw < 0) ccw += 360;
var ang:Number;
if (abs) ang = from + (cw < ccw ? cw : - ccw);
else ang = (cw < ccw ? cw : - ccw);
return ang;
}
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.