std::lerp - cppreference.com
提供: cppreference.com
<tbody> </tbody>
| ヘッダ |
||
|
|
(1) | (C++20以上) |
|
|
(2) | (C++20以上) |
|
|
(3) | (C++20以上) |
|
|
(4) | (C++20以上) |
1-3) a+t*(b−a)、すなわち、引数 t に対する a と b の間の線形補間 (または、 t が範囲 [0,1] の外側のときは外挿) を計算します。
4) 1-3) でカバーされない算術型の引数の全ての組み合わせに対するオーバーロード集合または関数テンプレート。 いずれかの引数が整数型の場合、それは double にキャストされます。 他のいずれかの引数が long double の場合、結果の型は long double であり、そうでなければ結果は double です。
引数
戻り値
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 であれば 1、 x < 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