再び、悪いタイトルのためにお詫び - 非常に説明するのは難しい。数学とJava - スケール値から利用可能なインデックスを見つけよう
私はこのプロジェクトで使用している言語だからJavaのタグを使用しましたが、実際にはどの言語にも当てはまります。
私は、わかりやすくするために簡単な例を使用します。
「ズーム」できるグラフィックを表示していて、スケールを表す0と1の間の浮動小数点にアクセスできます。
ここで同じグラフィックの異なるバージョンがあるとすると、「クローズアップ」の詳細が細かいレベルで表示され、遠いバージョンでは重要な機能のみが明瞭に示されます。
これらのバージョンのそれぞれは、次に大きなバージョンの半分のサイズです。最も近いクローズアップは1のズームレベルに相当します。
バージョンがいくつでもあり、それぞれが最後のものの半分の大きさのビューを表します。
だから、ユーザーがグラフィックをズームすると、別のバージョンを表示した方が良いかどうかを確認する必要があります。彼らがその点に達していない場合、私は以前のレベルの縮小版を表示します。
たとえば、5つの異なるバージョンがありますが(数字はありますが)、最小のものから最大のものまでありますが(これが簡単な場合は逆にすることもできます)、バージョン[4]が最大ですバージョン[0]は最小です。
例1のズームで
- 、ショーバージョン0.5のズームで[4]
- 、ショーバージョン0.25で[3]
- 、ショーバージョン[2]
- で0.125、ショーバージョン[1] 0.0625で
- 、ショーバージョン[0]
には、バージョン無駄がないのでバージョン[0]の半分に対応できますが、バージョンは[0]ですが、半分のサイズで表示されます。別のバージョンが追加された場合は、全体の縮尺(ズーム)が0.03125以下になったときに表示されます。
スケールの間には、次に大きいイメージを表示する必要がありますが、サイズは小さくしてください。
例えば、1のズーム時
- 、Iは最大表示したい(バージョン[4])、スケーリングされていません。 0.8のズーム時
- は、依然として0.5のズームで最大しかし0.8規模
- に示す、ショーバージョン[3] 0.3のズーム時
- スケーリングされていない、ショーバージョン[3] 0.6スケール で
- 0.2のズームでは、0.8スケールでバージョン[2]を表示します。
- 0.1のズームで、バージョン[1]を0に示します。8スケール
私はおそらくなどの条件文、またはリンクしMath.abs、一緒にこれをハック可能性がありますが、私は純粋数学でこれを処理するための非常にエレガントな、効率的な方法があります賭けだろう - それはちょうど道の上に私をです頭。そうでない場合は、クリーンで予測可能なコードを使用したアプローチに関する提案も歓迎されます。
ここでの目標は、表示するバージョンのバージョン(配列インデックス)とそれを表示する相対的なスケールを完全に「グローバル」スケールに基づいて見つけることです。
TYIA。
非常に印象的bdares :)返信用 – John
@bdaresのおかげで - 私は場合は恐れ入ります簡単な間違いをしますが、Math.logは1つの引数しか受け付けません。 – momo
@bdares - Math.log(zoom)/ Math.log(2)ですか? – momo