1

サイクルごとに多くのピクセルを描画できる非常に効率的な水平および垂直の線画関数のセットがあります(水平の場合は約4ピクセル/サイクル、垂直の場合は約0.25ピクセル/サイクル)。Bresenhamの線画を使用しています。任意の線を引くアルゴリズム。ただし、これには、比較的遅い(〜0.03ピクセル/サイクル)単一描画ピクセルルーチンの呼び出しが含まれます。

ブレゼンハムのアルゴリズムによって描かれた線のほとんどが、それらの間に十分な距離がある水平および垂直のストリップを示していることに気づきました。DrawPixelへのこれらの個々の呼び出しをDrawHorizおよびDrawVert描画ルーチンへの呼び出しに置き換えることが可能かどうか誰かが知っていますか?誰かがコード例を持っていますか?私はすでに試しましたが、成功は限られており、ほとんどの場合、出力が壊れていました。間違った方法でアプローチしているのではないかと思います。

どうもありがとう

4

1 に答える 1

2

ブレゼンハムアルゴリズムは通常、線の傾きの符号と大きさに応じて、4つの特殊なケースのセットとして実装されます(急な正、急な負、浅い正、浅い負)。急なケースでは、最終的に次のように描画されます。それぞれが1つの水平ピクセルだけシフトされた垂直線分。浅いものは横線です。

直線座標を計算するときは、移動の速い方をステップし(急な場合はy、浅い場合はx)、もう一方の座標の累積誤差を計算します。累積エラーが1になったら、次の値に変更します。したがって、通常のブレゼンハムアルゴリズムを実行してすべてのピクセルを計算し、各ピクセルを描画する代わりに、特定の「高速」座標の線を描画した場合はどうでしょうか。 「遅い」座標の最初から最後まで-私が何を意味するか知っているなら。つまり、各サイクルで描画するのではなく、遅い座標が変更されたときに、次の値にバンプする直前に描画しただけです。

はい、これでうまくいくと確信しています。もっと速くなるかどうかはわかりませんが、間違いなく機能します。

于 2011-03-17T00:42:12.433 に答える