【问题标题】:Need 2D Rotation interpolation logic需要 2D 旋转插值逻辑
【发布时间】:2017-01-19 02:33:09
【问题描述】:

See this Diagram

我需要旋转插值的逻辑

 public static float interPolateKeyForAngle(int startFrame, int endFrame, int currentFrame, float initialAngle, float endAngle)
{
    int frameDif = endFrame - startFrame + 1;
    int difCurrentFrame = Math.abs(startFrame - currentFrame) + 1;

    //Calculate here
}

我知道第 0 位置的起始角度和第 10 位置的结束角度我需要计算第 1 到第 9 位置角度有人请帮助我。

谢谢。

【问题讨论】:

  • 类似这样的东西:return ((endAngle - initialAngle)*(currentFrame - startFrame))/(endFrame - startFrame) + initialAngle;
  • 我已经尝试过这个计算,它只需要顺时针旋转我需要计算最短路径并找到该方向的角度。
  • 这可能意味着您需要将角度差归一化为 -Pi 和 Pi 之间。尝试使用delta = endAngle - initialAngle; delta = fmod(delta + 3*Pi, 2*Pi) - Pi
  • 图片已添加......
  • 图片中应该是0而不是180。 -- 您的关键情况似乎是,例如,从 20 度到 290 度时,您不想进入正 270 度,而是反向 270-360=-90 度。

标签: math matrix rotation interpolation angle


【解决方案1】:

两个值之间的离散线性插值总是

(V0.(n-i) + V1.i) / n

其中0≤i≤n,用于n 间隔(即n-1 中间值)。

【讨论】:

  • 问题是角度环绕 360°,所以这个算法有时会失败。我认为也应该指定插值的方向。
  • @ja72:您应该在问题中提到这一点。将360° 的合适倍数添加到V1,这样V1-V0 就是正确方向的总旋转角度。请注意,仅从给定的 V0V1 中无法找到该倍数。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-12-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-18
  • 2013-08-04
  • 2014-03-04
相关资源
最近更新 更多