0

任意のセグメントの方向/長さの最小平均時間で、線分を仮想整数空間にレンダリングしたいと思います。セグメントは、実数値(double)を持つ2つのポイントによって定義されます。

私はすでにうまくいくであろういくつかのアイデアを思いついたが、それらは恐ろしい、ヒューリスティックなハックとして私を襲う。(つまり、セグメントの方向に応じて開始する明確な「より良い方向」があります)。

確かに、ブルートフォース法よりも優れた方法があります(エンドポイント間の「長い」方向(x軸またはy軸)を見つけて、その軸に沿って各整数値に沿って進み、直交軸の値を丸めて正確に決定します「長」軸に沿ったすべての整数値での1ピクセル(整数点)の位置。)

4

2 に答える 2

2

「より良い方向」に関してあなたが言うことは、ブレゼンハムの線アルゴリズムを思い出させます、これはおそらくあなたが望むものですか? http://www.cs.helsinki.fi/group/goa/mallinnus/lines/bresenh.html

[編集]

非整数エンドポイントとの違いは私には明らかではありませんでしたが、ここに図があります。

長軸の整数スパンごとに1ピクセルを描画しているので、描画ポイントは同じ強度(アンチエイリアスなし)であると想定しています。

したがって、整数最適化(すでに行ったこと)と最後のラウンドポイントなしでブレゼンハムを実装することができます。または、整数ブレゼンハムによる固定小数点演算を使用します(つまり、座標に65536を掛けて丸め、長軸のステップを長くしてブレゼンハムを実行し、出力ポイントを必要な値に分割またはシフトしてから描画します)。

ただし、フォントを描画するのか、テセルカーブを描画するのか、ワイヤーフレームの長方形を描画するのかによって、ストレートブレゼンハムまたはアンチエイリアスアルゴリズムの方が見栄えがよくなる場合があります。

于 2013-01-14T23:31:10.910 に答える
1

X値とY値を関連付ける直線の方程式を見つける必要があります。次に、各整数x座標で評価します。これにより、y座標がフロートとして表示され、丸めて描画できます。

于 2013-01-14T23:15:50.257 に答える