2017-01-11 17 views
4

私は、ハードウェアを設計しており、クロックサイクルの特定の範囲内で変数の値をある値から別の値に徐々に増加させる必要があります。タイムドメインにラインを描く

私はBresenhamのアルゴリズムを使用しましたが、時間が可変の値の範囲よりも小さい場合、クロックの軸を物理的に変数の値の軸にスワップできないため、このアルゴリズムは適用できません。軸は交換することができないとき、私はアドバイス

  • を探しています

    は、ブレゼンハムのは何とか八分儀2で上記のような状況で動作するように修正することができます。

  • x-rangeがy-rangeよりも小さい場合に、他のアルゴリズムを使用することができます。
  • 解決策には他のアプローチがあり、両方のシナリオをカバーする別のアルゴリズムがありますか?

制限:FPエミュレーションだけでなく、除算も許可されていません。乗算は(加算と減算と同様に)可能です。

更新:2^n以外のモジュロは許されません。整数演算のみ(符号なしおよび/または符号付き)。アルゴリズムのセットアップには1〜2サイクルかかります。

+0

描画線は常にピクセルドメインで発生します。だから、ブレゼンハムを使っても問題はありません。 –

+0

@HenkHolterman x軸は時間であり、y軸と入れ替えることはできません。 – Anonymous

答えて

3

ブレゼンハムのアルゴリズムは、この状況に容易に適応される。

Y範囲(dy)はXの範囲(dx)より大きい場合、あなたは小数とitegral部分にdy/dx分けることができる:(x,y)から(x+dx,y+dy%dx)に線を計算する

  • 使用ブレゼンハムのアルゴリズムを
  • (x-dx)*floor(dy/dx)を追加します。すなわち、のインクリメントごとに追加のfloor(dy/dx)を蓄積します。
+0

分割は許可されていません。モジュロは許可されません。変数(レジスタ)は整数型のみです。 – Anonymous

+0

@Anonymousセットアップ時にdivision + modulusを実行するだけで、結果を保存する必要があります。プロセッサに除算命令がない場合は、shift +減算アルゴリズムを使用して除算命令を計算できます。 x値ごとに実行するのに十分速くないかもしれませんが、おそらくセットアップ時に実行するのに十分速いでしょう。 –

+0

問題を作り出しました。セットアップ動作は1〜2クロックサイクル以内に完了する必要があります。 Shift-subtractは除外されています。 – Anonymous

関連する問題