5

さまざまなサイズ (100x100 などの大きなサイズ) のチェス盤でのナイト ツアーのアルゴリズムがあり、結果をアニメーション化したいと考えています。騎士が新しい正方形に移動するたびに、(正方形の) キャンバス内の対応するピクセルの色が変化し、最終的にキャンバス全体が色付けされます。結果の動画は、アルゴリズムに関する Web ページで表示できます。

幅広いブラウザー サポートが必要な場合は、アニメーション GIF が最適な方法のように思えます (ただし、他の提案も歓迎します)。これを行うのに最適なツールまたはライブラリは何ですか? Linux または Mac コンピューターで自由に利用できるものは何でも喜んで使用します。

実際のアルゴリズムは長すぎて、ここで役立つ例を作成できません (本当に興味がある場合は、この論文を参照してください)。ただし、8x8 ボードでの (退屈な)キングズツアーの擬似コードは次のとおりです。

movie = new Movie()
frame = new Frame()
frame.fillRectangle((1,1), 8, 8, BLUE)
for row in [1..8] {
    if (row.isOdd()) { colrange = [1..8] } else { colrange = [8..1] }
    for col in colrange {
        frame.colourPixel(row, col, RED)
        movie.addFrame(frame)
    }
}
movie.saveAsGIF("tour.gif")

追加の質問:この映画の特別な機能を利用して、ファイル サイズを小さくすることはできますか? ウィキペディアの記事では、一部のピクセルのみを変更するだけで、これを実行できる可能性があることが示唆されています。実際、変更しているのはフレームごとに 1 つだけです。

4

2 に答える 2

6

これを実現するためにgiflibを使用できます。ドキュメントはダウンロード中です。

例として、このページには、giflibを使用して作成されたアニメーションGIFと、アニメーションの生成に使用されるプログラムのソースコードが含まれています。アニメーションにgiflibを使用する方法を確認するのに役立つ場合があります。

編集:後処理を気にしない場合の別の方法は、単純な形式(PPMなど)を使用してフレームを出力し、 ImageMagickを使用してアニメーションGIFを作成することです。

追加のクレジットの質問については、ImageMagickは、出力のサイズを縮小するためにフレーム比較を行うこともできます。

于 2009-06-03T21:33:53.460 に答える
0

追加のクレジットの質問に答えて、新しいフレームに画像の変更された部分を描画し、残りを透明に設定するだけで、この改善を自分で行うことができます。

于 2009-06-03T21:38:49.443 に答える