逆时针插入一个角度?

时间:2011-09-22 23:29:38

标签: c++

现在使用线性贝塞尔曲线来插入角度:

    float CardAnimation::valueAt( float valueA, float valueB, float t ) const
    {
        return (1.0f - t) * valueA + t * valueB;
    }

....
if(m_startCard.m_angle != m_endCard.m_angle)
            {
                m_targetCard->m_angle = 
                    valueAt(m_startCard.m_angle, m_endCard.m_angle,m_interval);
            }

这可以按预期工作。但这是我的问题。如果您的起始角度是0.5f并且您想要达到6.0f(以弧度表示)那么它将从0.5f到6.0f从顺时针方向移动到真正自6.0f到0.5f> 0。 3.14f逆时针方向从0.5f到6.0f会更加智能(导致仅移动0.78弧度而不是5.5)。如果abs(endAngle - startAngle> PI),我应该怎么做才能逆时针插值?

由于

2 个答案:

答案 0 :(得分:1)

也许是这样的:

  1. 通过重复添加或减去[0, 2Pi),将所有角度标准化为2Pi

  2. min(a, b)换算,以便您的新终点为0c

  3. 您希望自己的范围为c2Pi - c,以较小者为准,您必须根据您在(2)处的操作找出符号。然后,您希望在原始起点和起点加上范围之间进行插值。

答案 1 :(得分:1)

如果abs(endAngle - startAngle) > PI,则从2*PI中减去endAngle。然后,您不是从0.5转到6.0,而是从0.5转到-0.28

修改

这实际上假定为0 <= startAngle < endAngle <= 2*Pi

如果0 <= endAngle < startAngle <= 2*PistartAngle - endAngle > PI,则 2*PI添加到endAngle