9

クールな問題があります。この七面鳥の質量のちょうど 50% を強調しようとしています。実際には 50% にはなりませんが、50% を取得できれば残りは把握できます。

私の現在のアイデアは次のとおりです。すべてのピクセルをスキャンして、七面鳥の質量をピクセル単位で調べます。次に、七面鳥の 50% が必要な場合は、ピクセルの 50% を強調表示するまで、ピクセルを左から右に強調表示します。

誰もがより良いアイデアを持っていますか? これは、すべてのピクセルを 1 回ループしてピクセルをカウントし、再びピクセルの 50% を強調表示する必要がある、最も時間のかかる力ずくのアイデアです。

七面鳥の体は首よりもずっと肉厚であるため、画像を縦に分割しても七面鳥の 50% は残らないことに注意してください。

これはトルコ

4

2 に答える 2

3

あなたはパーセンテージが変わると言いますが、私はここで手足を動かし、七面鳥自体は変わらないと仮定します.

したがって、2 回ループする必要はありません。一度だけ実行し、データを参照可能な何らかの形式の構造にマップし、強調表示する必要があるたびに参照して、どこまで進む必要があるかを把握するだけで済みます。

たとえば、連想配列を作成します<percentage of mass (integer out of a hundred) => vertical column number (int)>

そうすれば、x パーセントをシェーディングする必要がある場合、ピクセルの cached_data[percent_to_highlight] 列をループしてすべてをシェーディングし、到達したらループから完全に抜け出すだけで済みます。


パフォーマンスをさらに高めるには、2 つの写真を用意します。連想配列はマップする必要がありますpercentage => byte_offset

生成したい画像ごとに、単に memcpy または PHP で同等のものを使用し0 -> byte_offsetて、シェーディングされた画像からシェーディングされていない画像への高速な範囲コピーを作成して保存します。もうループする必要はありません。これより速くなることはできません。

于 2012-04-24T02:13:18.940 に答える
0

この問題は、それを実行するための頭の上にスマートなアルゴリズムがあるようには見えません。しかし、私もCGの専門家ではないので、間違っているかもしれません。

そして、そのような解決策を探そうとすると、n でネストされたループを使用することになる場合、(O(n) よりも) 時間の複雑さが非常に大きくなる可能性があります。ここで、n は七面鳥が使用するピクセルの総数です。

代わりに、2パスの方法を実行することは実装が非常に簡単で(実装する時間/労力が非常に少ない)、定数2を無視してO(n)になりますが、これは悪い解決策ではありません。このソリューションを作成する目的、ハードウェア、スペースの制約などに応じて。ツーパスウェイを行く方がよりやりがいがあるかもしれません。

于 2012-04-24T02:25:32.010 に答える