みさご解体新書

クランプ処理

概要

クランプ処理は、値、最小値、最大値を渡して、値が最小値~最大値の範囲を超えないように調整を行う。

コード例

function clamp(value: number, min: number, max: number): number {
  return Math.max(Math.min(value, max), min);
}

value が min 未満なら min に、 value が max より大きいなら max にして、 value の値が min ~ max の範囲から外れないように調整する。

解説/アルゴリズム

value = Math.min(value, max);
value = Math.max(value, min);

Math.min(value, max) は、上限値である max の値を、value が超えないように調整するコードになる。もし max より value の値の方が大きいなら Math.min() で選ばれるのは max になる。value が max 以下なら範囲内に収まっているということで value の値が引き継がれる。

Math.max(value, min) は、下限値である min の値を、value が下回らないように調整するコードになる。もし min より value の値の方が小さいなら Math.max()で選ばれるのは min になる。value が min 以上なら範囲内に収まっているということで value の値が引き継がれる。

Math.min() の後に Math.max() を実行しているが、この処理が反対になってもよい。

内部で利用しているアルゴリズム

最大値・最小値