1

G'モーニングSO-

ビデオのバウンディングボックスを移動しようとしています。私はある種のこだわりのポイントにいます。15フレームごとにデータファイルにフレームがある場合、実際の各フレームの間に14フレームを作成する必要があります。これはツール(実際にはffmpegプラグインの一部)であるため、どのギャップサイズでも機能する必要があります。

2点間の距離と、始点から終点までスムーズに移行するために必要なフレーム数を取得する関数を作成しました。この関数が理想的に返すのは、前のフレームからシフトするピクセル数の配列です。

たとえば、フレーム1のxが50で、フレーム16のxが65の場合、各フレームが前のフレームに1を追加するように、すべて1の配列を作成します。これが私がこれまでに得たものです:

int* generateSequence(int difference, int numStep){
  int* sequence = (int*)malloc(sizeof(int*)*numStep);
  int i;
  for(i=0; i<numStep; i++){ 
    sequence[i] = 0;
  }
  while(difference > numStep){
    for(i=0; i<numStep; i++){ 
      sequence[i]++;
    }
    difference -= numStep;
  }

私はこの部分に満足しています(これは、間にあるフレームの数に対する2つの間の距離の倍数ごとに、間にある各フレームに1を追加します)。

しかし今、私はいくつかのフレームに1つを追加する必要があるところまで来ていますが、すべてではありません。私が持っているのは、さまざまなフレーム距離を生成するツールに対してあまり移植性がない、これらの仮帆装アルゴリズムだけです...

double delta = difference/numStep;
if(delta >=.05 && delta< .20){
  for(i=0; i<numStep; i+=6){ 
    sequence[i]++;
  }
}

モジュラス演算子を使用する必要がありますか、それとも別の方法でアプローチする必要がありますか?任意の値のように見えるハードコーディングは、私にはあまり適していません。

4

2 に答える 2

1

xより一般的には、合計が である「最も滑らかな」一連の整数を生成したいようですy。(滑らかさは、シリーズ内の要素間の最小平均距離です。)

これは、次のアルゴリズムで実現できます。

given sum and steps
float step = sum/steps
float delta = 0
sequence = []
for x:
    int integerstep = round(step + delta)
    delta += step - integerstep
    sequence.push(round(integerstep))

Python での実装例 (申し訳ありませんが、ac の担当者ではありません) を以下に示します。

def renderSmoothIntegerSequence(steps, distance):
    step = float(distance)/steps
    delta = 0
    sequence = []
    for _ in xrange(steps):
        integerstep = int(round(step + delta))
        delta += step - integerstep
        sequence.append(integerstep)
    return sequence

呼び出しの例:

>>> print renderSmoothIntegerSequence(5,8)
[2, 1, 2, 1, 2]
>>> print renderSmoothIntegerSequence(5,7)
[1, 2, 1, 2, 1]
>>> print renderSmoothIntegerSequence(32,1)
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
>>> print renderSmoothIntegerSequence(1,50)
[50]
于 2012-06-06T15:29:52.680 に答える
1

このボックス アニメーションをスムーズにするには、長方形の座標が整数で量子化されないように、各フレームに長方形を描画できる必要があります。つまり、補間計算の結果が (たとえば) X 値が 21.354 で Y 値が 50.813 の場合、これらの値をそれぞれ 21 と 51 に丸めることはできません。その結果、四角形の動きは非常にぎくしゃくして不規則になります。

問題は、ビデオのフレームがピクセルベースであることです。これは、通常、実際の (整数ではなく浮動小数点としても知られる) 座標で線や四角形を描画する組み込みの方法がないことを意味します。各フレームに四角形を描画するために使用しているライブラリが整数座標のみをサポートし、浮動小数点座標をサポートしていない場合 (多くのグラフィックス ライブラリが浮動小数点座標をサポートしているため、これを確認する必要がありますこれにより、この作業が非常に簡単になります)あなた)、それからあなたはこれのためにあなた自身を転がさなければならないでしょう.

ビデオの各フレームにこれらの長方形を実際に描画するために、どのライブラリを使用していますか?

于 2012-06-06T15:18:04.327 に答える