0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

パッと分からないスケールの変換を考える

Last updated at Posted at 2019-08-27

初めに

あるスケール(幅)のデータ(0~1等)を別のスケール(0~100等)に変更したいという場合が時々ある。
※生データは0~1だが、ページでの表示で0~画面の幅の値に変換したい等

こんな時、0~1→0~100とかなら0~1側の値を×100するだけでOKだし簡単
しかし、40~320→5~200にしたいとかになると、おバカなので頭がこんがらがってしまう。
ので変換式を考えてみようと思った。

結論

スケール $A:\{x|a<=x<=b,a \neq b\}$ の値$x$からスケール $B:\{y|c<=y<=d,c \neq d\}$ の値$y$への変換は

$y = (x-a) * \frac{(d-c)}{(b-a)} + c$
で表す事が出来る。
※以降$a \neq b$と$c \neq d$の記載は省略します。

導き方

まずは$A:\{x|a<=x<=b\}$からaを0にしたスケール、$A':\{x'|0<=x'<=b'\}$ に変換する事を考える。
すると、$b'=b-a$となり、$x'=x-a$で表す事が出来る。

つまり
$A:\{x|a<=x<=b\}$ → $A':\{x'|0<=x'<=b-a,x'=x-a\}$

同様に$B:\{y|c<=x<=d\}$からcを0にしたスケール、B'は

$B:\{y|c<=x<=d\}$ → $B':\{y'|0<=y'<=d-c,y'=y-c\}$

と出来る。

次にA'からB'への変換を考えると、
$y' = x' * \frac{(d-c)}{(b-a)}$
と出来るので、x'とy'をx,yに直すと
$y-c = (x-a) * \frac{(d-c)}{(b-a)}$
となる。

これをyについて解けば
$y = (x-a) * \frac{(d-c)}{(b-a)} + c$
と出来る。

実際に例に上げた
40~320→5~200を考えてみると
xが40の時
$(40-40) * \frac{(200-5)}{(320-40)} + 5 = 5$

xが320の時
$(320 - 40) * \frac{(200-5)}{(320-40)} + 5 = 200$

xが180(中央値)の時
$(180 - 40) * \frac{(200-5)}{(320-40)} + 5 = 102.5(5~200の中央値)$

となっている。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?