lerp — std::lerp
lerp — std::lerp (선형 보간)
std::lerp는 두 값 사이를 **선형 보간(linear interpolation)**해요. C++20에서 도입됐어요.
t가 0이면 a, 1이면 b를 반환하고, 그 사이의 값은 선형으로 보간돼요.
출처: cppreference
본문
// <cmath> 헤더, C++20
constexpr float lerp( float a, float b, float t ) noexcept;
constexpr double lerp( double a, double b, double t ) noexcept;
constexpr long double lerp( long double a, long double b, long double t ) noexcept;
t가 0이면 a, 1이면 b, 0과 1 사이면 비례 보간을 반환해요.
#include <cmath>
std::lerp(0.0, 10.0, 0.5); // 5.0 (중간)
std::lerp(0.0, 10.0, 0.0); // 0.0
std::lerp(0.0, 10.0, 1.0); // 10.0
std::lerp(0.0, 10.0, 2.0); // 20.0 (범위 밖도 외삽)
특징
- constexpr — 컴파일 타임 사용 가능.
t가 [0,1]을 벗어나면 외삽(extrapolation)돼요.std::numbers상수 등과 함께 애니메이션·그래픽·보간 시나리오에서 유용.
// 애니메이션 보간 예
double t = 0.0;
double pos = std::lerp(start, end, t); // start→end 보간
수학적 정의
lerp(a, b, t) = a + t * (b - a)와 유사하지만, 수치적으로 더 안정적인 방식으로 계산돼요. 큰 값에서도 정확도가 좋아요.
// 게임에서 두 점 사이를 부드럽게 이동
double mix = std::clamp(delta, 0.0, 1.0);
auto value = std::lerp(min, max, mix);
std::lerp는 애니메이션, 그래픽, 물리, 머신러닝 등 보간이 필요한 곳에서 표준적으로 쓰이는 함수예요.