1. ホーム
  2. math

[解決済み】最小値と最大値がわかっている数値の範囲を縮小する方法

2022-04-03 18:39:44

質問

そこで、数値の範囲を取り、ある範囲に合うように値を縮小する方法を考えています。 なぜこのようなことをしたいかというと、java swing jpanelで楕円を描こうとしているからです。 各楕円の高さと幅は1-30の範囲にしたいのです。 データセットから最小値と最大値を見つけるメソッドはありますが、実行時まで最小値と最大値は得られません。 これを簡単に実行する方法はありますか?

どのように解決するのですか?

例えば、ある範囲を拡大縮小したいとします。 [min,max] から [a,b] . を満たす(連続的な)関数を探しているんですね。

f(min) = a
f(max) = b

あなたの場合 a は1であり b は30になりますが、まずはもっとシンプルに [min,max] の範囲に [0,1] .

プティング min を関数に代入し、0を得るには、次のようにします。

f(x) = x - min   ===>   f(min) = min - min = 0

というわけで、ほぼ思い通りになりました。 しかし max とすると max - min 本当は1が欲しいのに。 そのため、スケールを変更する必要があります。

        x - min                                  max - min
f(x) = ---------   ===>   f(min) = 0;  f(max) =  --------- = 1
       max - min                                 max - min

というのは、私たちが欲しいものです。 そこで、翻訳と拡大縮小を行う必要があります。 では、代わりに任意の値を ab のように、もう少し複雑なものが必要です。

       (b-a)(x - min)
f(x) = --------------  + a
          max - min

を入れることで確認できます。 min に対して x が得られるようになりました。 a を入れると maxb .

また、次のことにお気づきでしょうか。 (b-a)/(max-min) は、新しい範囲のサイズと元の範囲のサイズとの間のスケーリングファクターである。 つまり、実際にはまず x によって -min の新しい最小値に変換し、正しい倍率でスケーリングします。 a .

お役に立てれば幸いです。