PDA

Просмотр полной версии : Поворот в ближайшую сторону


54321go
04.06.2012, 22:02
Для поворотов пользуюсь TweenLite от greensock, если надо сделать поворот в ближайшую сторону тесть если у меня например надо повернуть от 10 градусов до 350 градусов стандартно надо в таком случаи менять 350 в -10. Какой функцией это можно сделать чтобы правильно работало?

RJ Presto
04.06.2012, 22:11
не очень понял вопрос
если надо просто угол преобразовать - то
if (angle > 180)
{
angle -= 360;
}

54321go
04.06.2012, 22:16
угол преобразовать, не надо, надо понять, что ближе минусовое или плюсовое значение.

ramshteks
04.06.2012, 23:04
https://github.com/ramshteks/as3bicycle-lib/blob/master/src/ramshteks/as3/math/geom/Angle.as#L23

вот метод(23 строчка), который дает минимальный угод между двумя заданными.(Знак означает направление). Писалось как раз под сходную с вашей задачу
Если это поможет конечно

Hauts
04.06.2012, 23:10
Вроде как плагин же был у гринсока (или сразу встроеная функция) в твинмаксе, shortRotation, если не ошибаюсь. Если вам не принципиально, что использовать, TweenLite или TweenMax, конечно.

ramshteks, в вашем коде можно Math.PI / 180 вынести в отдельное поле :)

ramshteks
04.06.2012, 23:15
в вашем коде можно Math.PI / 180 вынести в отдельное поле
ради одного использования? Можно конечно, чтобы боб мартин был счастлив =)

Wolsh
05.06.2012, 01:19
Несчастный Боб — горе в семье.
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);
}

Wolsh
05.06.2012, 12:08
Для твинера — да; но, конечно, не стóит включать это в данную функцию))) дабы не испытать удивление. Либо функция должна быть названа и продокументирована соответственно, как преобразующая значение 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;
}