2

X 値がわかっている場合に Y 値の位置を計算できる、ブレセンハム ライン アルゴリズムの基本バージョンの方程式を探しています。

X は常に正で、常に Y よりも大きくなります。ループは、最後に到達するまで X に 1 を追加するだけです。

これが私のコードです:

int err = (Y << 1) - X;
for(i=0; i<=X; i++)
{
    if(err > 0)
    {
        step++;
        err = (err - (X << 1)) + (Y << 1);
    }
    else
    {
        err = err + (Y << 1);
    }
    printf("X=%d  Y=%d\n", i, step);
}

私が探しているのは、アルゴリズムを実行せずに整数演算のみを使用して、特定の X 値でステップ (Y 軸) の値が何であるかを把握する方法です。

この理由は、一時停止できるシステムがあるためですが、現在の X 値 (Y ではなく) のみを返し、これが発生したときに Y 値を把握する必要があります。

デイブ

4

1 に答える 1

0

私はそれstepが最初にあると仮定してい0ます。あなたのコードから、帰納的に方程式を導き出すことができます

step * (X << 1) + err - (i + 1) * (Y << 1) == (Y << 1) - X,

printf声明の時点で適用されます。を解きstepます。

step == ((Y << 1) - X + (i + 1) * (Y << 1) - err) / (X << 1)

ここでの分割は正確です。以来、包括的と排他的の間X > Yであることが帰納的にわかっているので、その範囲の最大値を追加して、フロア分割に任せるべきです。-err-(Y << 1)(X << 1) - (Y << 1)

step == ((Y << 1) - X + (i + 1) * (Y << 1) + (X << 1) - (Y << 1) - 1) / (X << 1),

または、単純化すると、

step == ((i + 1) * (Y << 1) + X - 1) / (X << 1).

の方程式も得errられます。

((Y << 1) - X + (i + 1) * (Y << 1) - err) % (X << 1) == 0
err ==   ((Y << 1) - X + (i + 1) * (Y << 1) + (X << 1) - (Y << 1) - 1) % (X << 1)
       - (X << 1) + (Y << 1) + 1
err == ((i + 1) * (Y << 1) + X - 1) % (X << 1) - (X << 1) + (Y << 1) + 1
于 2014-08-25T15:31:14.647 に答える