名前空間
変種
操作

std::lerp

提供: cppreference.com
< cpp‎ | numeric
ヘッダ <cmath> で定義
constexprfloat       lerp(float a, float b, float t )noexcept;
(1) (C++20以上)
constexprdouble      lerp(double a, double b, double t )noexcept;
(2) (C++20以上)
constexprlongdouble lerp(longdouble a, longdouble b, longdouble t )noexcept;
(3) (C++20以上)
constexpr Promoted    lerp( 算術型1 a, 算術型2 b, 算術型3 t )noexcept;
(4) (C++20以上)
1-3)a+t*(b−a)、すなわち、引数 t に対する ab の間の線形補間 (または、 t が範囲 [0,1] の外側のときは外挿) を計算します。
4) 1-3) でカバーされない算術型の引数の全ての組み合わせに対するオーバーロード集合または関数テンプレート。 いずれかの引数が整数型の場合、それは double にキャストされます。 他のいずれかの引数が longdouble の場合、結果の型は longdouble であり、そうでなければ結果は double です。

[編集]引数

a, b, t - 浮動小数点または整数型の値

[編集]戻り値

a+t(b−a)

isfinite(a) && isfinite(b) のとき、以下の性質が保証されます。

  • t == 0 の場合、結果は a と等しい。
  • t == 1 の場合、結果は b と等しい。
  • t >= 0 && t <= 1 の場合、結果は有限である。
  • isfinite(t) && a == b の場合、結果は a と等しい。
  • isfinite(t) || (!isnan(t) && b-a != 0) の場合、結果は NaN でない。

CMP(x,y) を、 x > y であれば 1x < y であれば -1、そうでなければ 0 としたとき、任意の t1 および t2 について、 CMP(lerp(a, b, t2), lerp(a, b, t1))CMP(t2, t1)、および CMP(b, a) の積は非負です (つまり、 lerp は単調です)。

[編集]

#include <iostream>#include <cmath>   int main(){float a=10.0, b=20.0;   std::cout<<"a="<< a <<'\n';std::cout<<"b="<< b <<'\n';std::cout<<"mid point="<< std::lerp(a,b,0.5f)<<'\n';std::cout<<std::boolalpha<<(a == std::lerp(a,b,0.0f))<<'\n';}

出力:

a=10 b=20 mid point=15 true
close